不能使用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