0
我目前正在編寫一個測試函數,它在按鈕單擊時動態地將元素添加到JPanel
中。我正在使用GridBagLayout
。這裏是我的功能的代碼:GridBagLayout錯誤地顯示元素
public void buildGui(){
ConnectionInfoPanel.removeAll();
//test first group of items
listOfLabels.add(new JLabel("Label 1"));
listOfLabels.add(new JLabel("Label 2"));
listOfLabels.add(new JLabel("Label 3"));
listOfLabels.add(new JLabel("Label 4"));
GridBagConstraints c = new GridBagConstraints();
c.weightx = 1;
c.weighty = 1;
c.insets = new Insets(10,10,10,10);
c.anchor = GridBagConstraints.NORTHWEST;
ConnectionInfoPanel.add(listOfLabels.get(0), c);
ConnectionInfoPanel.add(new JLabel(), c);
ConnectionInfoPanel.add(listOfLabels.get(1), c);
ConnectionInfoPanel.add(new JLabel(), c);
ConnectionInfoPanel.add(listOfLabels.get(2), c);
ConnectionInfoPanel.add(new JLabel(), c);
ConnectionInfoPanel.add(listOfLabels.get(3), c);
ConnectionInfoPanel.add(new JLabel(), c);
//test second group
listOfLabels.add(new JLabel("Label 5"));
listOfLabels.add(new JLabel("Label 6"));
listOfLabels.add(new JLabel("Label 7"));
listOfLabels.add(new JLabel("Label 8"));
GridBagConstraints x = new GridBagConstraints();
x.weightx = 1;
x.weighty = 2;
x.insets = new Insets(10,10,10,10);
// x.anchor = GridBagConstraints.NORTHWEST;
ConnectionInfoPanel.add(listOfLabels.get(4), x);
ConnectionInfoPanel.add(new JLabel(), x);
ConnectionInfoPanel.add(listOfLabels.get(5), x);
ConnectionInfoPanel.add(new JLabel(), x);
ConnectionInfoPanel.add(listOfLabels.get(6), x);
ConnectionInfoPanel.add(new JLabel(), x);
ConnectionInfoPanel.add(listOfLabels.get(7), x);
ConnectionInfoPanel.add(new JLabel(), x);
ConnectionInfoPanel.updateUI();
}
在第一組元素一切工作正常。他們從左上角開始(0,0)。
但在第2組元素的它們的起始位置成爲面板的中心(在Y軸)和結束Label4的(沿X軸)。但我想要實現的是將其起始位置設置爲(0,1)。所以這個小組直接顯示在第一個下面。任何人都可以告訴我我做錯了什麼?
這使得標籤發瘋,顯示所有的地方。我試過了,不幸的是我鬆散地控制了元素。 – iColdBeZero 2014-10-06 07:09:52
但layoutmanager不知何故需要知道你想放置元素的位置。您也可以嘗試將兩組標籤放在兩個flowLayout面板中,然後將這兩個標籤添加到一個gridbaglayout面板中。 – 2014-10-06 07:13:36
看到我更新的答案 – 2014-10-06 07:20:37