为什么链接组件在GroupLayout中无法调整大小?

时间:2017-04-10 19:17:52

标签: java swing grouplayout

对于我正在制作的计算器应用程序的GUI,我有一个JButton个对象的网格,其中所有对象都是相同的大小,除了一个是其他对象宽度的两倍。它应该看起来像这样(除了直线):

enter image description here

我首先想到的是我为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)电话,则按钮大小会变得奇怪。 linkSizeb1变得比b2b3更宽,但不会宽于b4

1 个答案:

答案 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) ...

我认为你应该使用第一种选择。