Java是否有任何XY布局?
因此,我可以在X和Y坐标处设置一个Button,并且假设它是如此之大……。因为这种边框布局以及网格和面板问题使我发疯。:)
他们每个人都在流淌,越来越紧张。为了使它们变小,您必须将面板放在面板中面板放在面板^^中,
将容器的布局设置为null(无LayoutManager)时,可以使用component.setBounds(x,y,w,h)分别设置组件的边界。
*在所有情况下, *固定的版式都会 导致 UI设计不良
(在99%的情况下)(例如,如果您的标签没有得到其首选的尺寸,则当您的应用程序支持多种语言时,您会遇到市长问题),所以
我的建议是写一个专业的布局经理可以满足您的特定需求 。
编写自定义布局管理器非常容易,您所要做的就是能够计算具有给定组件和布局的容器的首选大小,并通过设置组件的(计算出的)边界来进行布局。我摆脱了GridBagLayout并很久以前就开始编写自己的布局,而布局从未如此简单。
这是一个自定义布局的示例,该布局用于布局键和值组件对:
public class KeyValueLayout implements LayoutManager {
public static enum KeyAlignment {
LEFT, RIGHT;
}
private KeyAlignment keyAlignment = KeyAlignment.LEFT;
private int hgap;
private int vgap;
public KeyValueLayout () {
this(KeyAlignment.LEFT);
}
public KeyValueLayout (KeyAlignment keyAlignment) {
this(keyAlignment, 5, 5);
}
public KeyValueLayout (int hgap, int vgap) {
this(KeyAlignment.LEFT, hgap, vgap);
}
public KeyValueLayout (KeyAlignment keyAlignment, int hgap, int vgap) {
this.keyAlignment = keyAlignment != null ? keyAlignment : KeyAlignment.LEFT;
this.hgap = hgap;
this.vgap = vgap;
}
public void addLayoutComponent (String name, Component comp) {
}
public void addLayoutComponent (Component comp, Object constraints) {
}
public void removeLayoutComponent (Component comp) {
}
public void layoutContainer (Container parent) {
Rectangle canvas = getLayoutCanvas(parent);
int ypos = canvas.y;
int preferredKeyWidth = getPreferredKeyWidth(parent);
for (Iterator<Component> iter = new ComponentIterator(parent); iter.hasNext();) {
Component key = (Component) iter.next();
Component value = iter.hasNext() ? (Component) iter.next() : null;
int xpos = canvas.x;
int preferredHeight = Math.max(key.getPreferredSize().height, value != null ? value.getPreferredSize().height : 0);
if (keyAlignment == KeyAlignment.LEFT)
key.setBounds(xpos, ypos, key.getPreferredSize().width, key.getPreferredSize().height);
else
key.setBounds(xpos + preferredKeyWidth - key.getPreferredSize().width, ypos, key.getPreferredSize().width,
key.getPreferredSize().height);
xpos += preferredKeyWidth + hgap;
if (value != null)
value.setBounds(xpos, ypos, canvas.x + canvas.width - xpos, preferredHeight);
ypos += preferredHeight + vgap;
}
}
public Dimension minimumLayoutSize (Container parent) {
int preferredKeyWidth = getPreferredKeyWidth(parent);
int minimumValueWidth = 0;
int minimumHeight = 0;
int lines = 0;
for (Iterator<Component> iter = new ComponentIterator(parent); iter.hasNext();) {
lines++;
Component key = (Component) iter.next();
Component value = iter.hasNext() ? (Component) iter.next() : null;
minimumHeight += Math.max(key.getPreferredSize().height, value != null ? value.getMinimumSize().height : 0);
minimumValueWidth = Math.max(minimumValueWidth, value != null ? value.getMinimumSize().width : 0);
}
Insets insets = parent.getInsets();
int minimumWidth = insets.left + preferredKeyWidth + hgap + minimumValueWidth + insets.right;
minimumHeight += insets.top + insets.bottom;
if (lines > 0)
minimumHeight += (lines - 1) * vgap;
return new Dimension(minimumWidth, minimumHeight);
}
public Dimension preferredLayoutSize (Container parent) {
int preferredKeyWidth = getPreferredKeyWidth(parent);
int preferredValueWidth = 0;
int preferredHeight = 0;
int lines = 0;
for (Iterator<Component> iter = new ComponentIterator(parent); iter.hasNext();) {
lines++;
Component key = (Component) iter.next();
Component value = iter.hasNext() ? (Component) iter.next() : null;
preferredHeight += Math.max(key.getPreferredSize().height, value != null ? value.getPreferredSize().height : 0);
preferredValueWidth = Math.max(preferredValueWidth, value != null ? value.getPreferredSize().width : 0);
}
Insets insets = parent.getInsets();
int preferredWidth = insets.left + preferredKeyWidth + hgap + preferredValueWidth + insets.right;
preferredHeight += insets.top + insets.bottom;
if (lines > 0)
preferredHeight += (lines - 1) * vgap;
return new Dimension(preferredWidth, preferredHeight);
}
public Dimension maximumLayoutSize (Container target) {
return preferredLayoutSize(target);
}
private int getPreferredKeyWidth (Container parent) {
int preferredWidth = 0;
for (Iterator<Component> iter = new ComponentIterator(parent); iter.hasNext();) {
Component key = (Component) iter.next();
if (iter.hasNext())
iter.next();
preferredWidth = Math.max(preferredWidth, key.getPreferredSize().width);
}
return preferredWidth;
}
private Rectangle getLayoutCanvas (Container parent) {
Insets insets = parent.getInsets();
int x = insets.left;
int y = insets.top;
int width = parent.getSize().width - insets.left - insets.right;
int height = parent.getSize().height - insets.top - insets.bottom;
return new Rectangle(x, y, width, height);
}
private class ComponentIterator implements Iterator<Component> {
private Container container;
private int index = 0;
public ComponentIterator (Container container) {
this.container = container;
}
public boolean hasNext () {
return index < container.getComponentCount();
}
public Component next () {
return container.getComponent(index++);
}
public void remove () {
}
}
}
只需设置布局并交替添加标签和值组件即可。它易于使用,特别是与GridBagLayout或具有自定义布局的嵌套面板相比。
XY图表(散点图)基于一个由X和Y值列表组成的数据系列。 每个值对(X,Y)是坐标系中的一个点。 这里,一个值确定水平(X)位置,另一个确定垂直(Y)位置。 本章演示了如何使用JFreeChart从给定的业务数据集创建XY Chart 。 业务数据 考虑一个我们想要为所有主流浏览器创建XY图表的示例。 在这里,从不同类别的人收集不同的表现分数,如下所示 - Firefox 分类(X) 分数(Y)
描述 (Description) 逻辑运算符[XY]匹配X后跟Y. 例子 (Example) 以下示例显示了逻辑运算符的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class LogicalOperatorDemo { private sta
xy-server是一款奇幻回合制的MMORPG游戏,游戏系统简介 1. 基础系统 2. 幻兽系统 3. 家园系统 4. 摆摊系统 5. 好友系统 6. 佣兵团系统 7. 佣兵战系统 8. 副本系统 9. 任务系统 10.坐骑系统 11.锻造系统 12.战斗系统(pvp,pve) 14.聊天系统 15.切磋系统 16.排名系统
问题内容: 在我的项目中,每次打开JSP时都要分配一个变量。我在JSP和EL 中用scriptlet尝试过,它可以返回变量。 但似乎不起作用。 之后出现错误,是否无法在scriptlet中直接从EL分配变量? 问题答案: 您正在混合 脚本 和EL,并期望它们“同步”运行。那只是行不通的。一个是写的JSP的旧校园的方式 和另一种是写的JSP的现代生活方式。您应该同时使用一个或多个。 回到具体的问题,
如何在IPython笔记本内的Matplotlib中将图例添加到xy线图中?我目前的尝试: 这样做,我得到以下错误: /Users/mc/.virtualenvs/kaggle/lib/python2.7/site-packages/matplotlib/legend.py:613:用户警告:图例不支持[]使用代理艺术家代替。 http://matplotlib.sourceforge.net/u
我需要一些帮助,以获得一个堆叠条形图的X和Y坐标,每个直方图在堆叠条形图。 有人请帮助获得X和Y坐标的每个矩形的堆叠酒吧悬停。 这是我引用的堆叠条形图的链接。