BorderLayout
そのレイアウトには5つのコンポーネント(、、、、、)用のスペースしかないため、これを
BorderLayout.CENTER
使用するBorderLayout.NORTH
ことBorderLayout.WEST
はできません。BorderLayout.SOUTH
BorderLayout.EAST
組み込みレイアウトの1つを使用したソリューション:
必要に応じて、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を使用することもできます。これは、基本的に1つのマネージャーですべてのオプションを提供します。そして、あなたはたくさんのよりクリーンなコード(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");
}