对于我制作的计算器应用程序的GUI,我有一个JButton
对象的网格,其中所有对象的大小相同,除了一个是其他对象的宽度的两倍。它应该是这个样子(除这些线条是直的):为什么链接组件在GroupLayout中无法调整大小?
我首先想到的是我定义了一个大小为JButton
对象(姑且称之为CELL_SIZE
),然后设置首选大小的按钮到CELL_SIZE
,除了较长的按钮将有CELL_SIZE * 2
。这个工作,直到你调整窗口的大小。我希望按钮调整自己的大小,以便无论窗口的尺寸如何,所有按钮都是相同的大小,除了较长的按钮。所以我尝试使用linkSize
,除了长整数之外的所有按钮都作为参数。但按钮不会调整大小!然后我在javadoc中读到linkSize
可以防止组件被调整大小。为什么是这样?我可以使用这种方法来完成这种布局,还是我需要别的东西?
下面是我输入的一个类来演示问题(实际应用程序拥有除布局以外的其他功能)它只有5个按钮,用于表示图像的左下角3x2区域。
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
更宽,但不如b5
那么宽。
GridBagLayout在这里可能是一个更好的选择,它内置了对基于网格的布局的支持,包括像您所描述的跨多个单元的元素。 – Charlie