對於我製作的計算器應用程序的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