您不能使用BorderLayout
它,因为该布局只有 5 个组件的空间:
BorderLayout.CENTER
、BorderLayout.NORTH
、BorderLayout.WEST
、BorderLayout.SOUTH
、BorderLayout.EAST
。
具有内置布局之一的解决方案:
我建议使用 aFlowLayout
或 a GridLayout
,这取决于你想要什么。您仍然可以使用 BorderLayout 作为外面板,但只需引入具有上述布局之一的内面板。
因此,使用 a 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,这是一个 3rd 方布局管理器,它基本上为您提供了一个管理器中的所有选项。而且您将拥有更清晰的代码(恕我直言)。缺点当然是您必须使用外部 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");
}