对于我正在制作的计算器应用程序的GUI,我有一个JButton
个对象的网格,其中所有对象都是相同的大小,除了一个是其他对象宽度的两倍。它应该看起来像这样(除了直线):
我首先想到的是我为JButton
对象定义了一个大小(让我们称之为CELL_SIZE
),然后将按钮的首选大小设置为{{1} },除了较长的按钮会有CELL_SIZE
。这有效,直到您调整窗口大小。我希望按钮自己调整大小,这样无论窗口的尺寸如何,所有按钮都是相同的尺寸,除了较长的按钮。所以我尝试使用CELL_SIZE * 2
,除了长按钮之外的所有按钮都作为参数。但按钮不会调整大小!然后我在javadoc中读到linkSize
阻止组件调整大小。为什么是这样?我可以使用此方法来完成此布局,还是需要其他内容?
下面是我输入的类,用于演示问题(实际应用程序除了布局外还拥有其他功能)它只有5个按钮,用于表示图像的左下角3x2区域。
linkSize
编辑:如果我拨打import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
class A extends JPanel{
public static final int CELL_SIZE = 32;
JButton b1 = new JButton("1");
JButton b2 = new JButton("2");
JButton b3 = new JButton("3");
JButton b4 = new JButton("4");
JButton b5 = new JButton("5");
public A(){
GroupLayout layout = new GroupLayout(this);
layout.setHorizontalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup()
.addComponent(b1, 0, CELL_SIZE, Short.MAX_VALUE)
.addComponent(b2, 0, CELL_SIZE, Short.MAX_VALUE)
).addGroup(layout.createParallelGroup()
.addGroup(layout.createSequentialGroup()
.addComponent(b3, 0, CELL_SIZE, Short.MAX_VALUE)
.addComponent(b4, 0, CELL_SIZE, Short.MAX_VALUE)
)
.addComponent(b5, 0, CELL_SIZE * 2, Short.MAX_VALUE)
)
);
layout.setVerticalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup()
.addComponent(b1, 0, CELL_SIZE, Short.MAX_VALUE)
.addComponent(b3, 0, CELL_SIZE, Short.MAX_VALUE)
.addComponent(b4, 0, CELL_SIZE, Short.MAX_VALUE)
).addGroup(layout.createParallelGroup()
.addComponent(b2, 0, CELL_SIZE, Short.MAX_VALUE)
.addComponent(b5, 0, CELL_SIZE, Short.MAX_VALUE)
)
);
layout.linkSize(b1, b2, b3, b4);
setLayout(layout);
}
private static void createAndShowGUI(){
JFrame f = new JFrame("GroupLayout Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new A());
f.pack();
f.setVisible(true);
}
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
createAndShowGUI();
}
});
}
}
并删除addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
电话,则按钮大小会变得奇怪。 linkSize
和b1
变得比b2
和b3
更宽,但不会宽于b4
。
答案 0 :(得分:1)
来自Oracle tutorial:
1)强制组件可调整大小(允许收缩和增长):
group.addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ...
这允许组件在零大小(最小)到任何大小之间调整大小(Short.MAX_VALUE,因为最大大小意味着“无限”)。如果我们希望组件不缩小到其默认最小大小以下,我们将在第二个参数中使用GroupLayout.DEFAULT_SIZE而不是0。
2)使组件固定大小(抑制大小调整):
group.addComponent(component, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE) ...
我认为你应该使用第一种选择。