3

JMenuBar と JPanel に格納された 2 つのコンポーネントを含む JFrame 子孫ウィンドウがあります。1 つは画面の大部分を占める JTabbedPane で、もう 1 つは一連のボタンを含む小さな JPanel です。それらは次のように構成されています。

//in constructor:
menubar = new BFIDEMenuBar(this);

setJMenuBar(menubar);

content = new JPanel();
add(content);

buttons = new BFIDEButtonBar();

editors = new JTabbedPane();

content.add(buttons, BorderLayout.NORTH);
content.add(editors, BorderLayout.CENTER);

ウィンドウが特定のサイズよりも小さい場合、コンポーネントは期待どおりに配置されます。JTabbedPane が中央を占め、その上に「ボタン」JPanel が中央に配置されます。 いいね。

ただし、ウィンドウのサイズが特定のしきい値を超えて変更されると、JPanel は場所を変更します。

見栄えが悪い。

ウィンドウを縮小すると、以前の (正しい) 位置に戻ります。

BorderLayoutの javadoc を読み、以前に使用したことがありますが、まだこの現象に遭遇していません。javadoc には、「NORTH および SOUTH コンポーネントは水平方向に引き伸ばされる可能性があります」と記載されています。しかし、これはストレッチとは見なされません。

setVisibleいくつかのリスナーと必須の 、などを追加する以外に、コンストラクターから呼び出されるメソッドはありませんsetEnabled

なぜこれが起こっているのか、またはそれを修正する方法について何か考えはありますか?

4

1 に答える 1

4

JPanelデフォルトでは を使用しますFlowLayout

使ってみて

content = new JPanel(new BorderLayout());

代わりは

于 2013-04-21T05:52:13.823 に答える