不能使用BorderLayout
的,因爲該佈局只有5個組件房間: BorderLayout.CENTER
,BorderLayout.NORTH
,BorderLayout.WEST
,BorderLayout.SOUTH
,BorderLayout.EAST
。
解決方案與內置的佈局之一:
我會建議使用FlowLayout
或GridLayout
,這取決於你想要什麼。您仍然可以使用BorderLayout作爲外部面板,但只需使用上述佈局之一引入內部面板即可。
因此,使用GridLayout
時,您會將標籤包裹在網格佈局中,然後將其放入邊框佈局中。您的代碼應該是這樣的:
panel.setLayout(new BorderLayout());
final JPanel upperPanel = new JPanel();
panel.add(upperPanel, BorderLayout.NORTH); // add some stuff in the north
final JPanel innerPanel = new JPanel(new GridLayout(1,0));
JLabel[] dashedLineLabel = new JLabel[wordLength];
for (int i = 0; i < wordLength; i++) {
dashedLineLabel[i] = new JLabel("__ ");
dashedLineLabel[i].setFont(new Font("Serif", Font.BOLD, 30));
innerPanel.add(dashedLineLabel[i]);
}
panel.add(innerPanel, BorderLayout.CENTER);
解決方案與MigLayout:
如果你不想不同的佈局中進行選擇,也可以使用MigLayout,這是一個第三方的佈局管理器,基本上給你一個經理的所有選擇。你會有更多更乾淨的代碼(imho)。當然,缺點是你必須使用外部jar文件作爲依賴。 (順便說一句:既然我發現了MigLayout,我從來沒有再次使用另一個佈局管理器。)
隨着MigLayout
:
final JPanel labelPanel = new JPanel(new MigLayout("", "", ""));
panel.add(labelPanel, "north");
JLabel[] dashedLineLabel = new JLabel[wordLength];
for (int i = 0; i < wordLength; i++) {
dashedLineLabel[i] = new JLabel("__ ");
dashedLineLabel[i].setFont(new Font("Serif", Font.BOLD, 30));
panel.add(dashedLineLabel[i], "wrap");
}
+1對於MigLayout! :) –
+1,MigLayout是最好的。 ;) – brimborium