0

JList を自分のレイアウト (2 列のレイアウト) に追加しようとしています。追加すると、列全体が親 JFrame の幅全体を占有します。

LwjglCanvas c = new LwjglCanvas(blah);
c.getCanvas().setMaximumSize(new Dimension(480, 800)); // explicit width

Box h = Box.createHorizontalBox();
h.add(c.getCanvas());
Box v = Box.createVerticalBox();
h.add(v);
JList list = new JList(mDefaultListModel); // plz use remainder width
v.add(list);

JFrame frame = new JFrame();
frame.setMinimumSize(new Dimension(800, 800));
frame.add(h);
frame.pack();
frame.setVisible(true);

したがって、JList を追加すると、右側の列が JFrame の全幅に拡張されます。JList を JScrollPane にラップしようとしましたが、作成時にハングしているようで、レイアウトが完了しません。

これを行う正しい方法は何ですか?

ありがとう

- - - アップデート - - - - - - -

JList に一連の String インスタンスをデータとして与えています。弦はたまたまかなり長いです。JList は、他のすべてのレイアウト パラメータを無視して、レンダリングする必要がある最長の文字列と同じ幅になっているようです。理想的には、必要な最大幅まで拡大するのではなく、水平方向にスクロールするだけです。

- - - アップデート - - - - - - -

最後に、何が起こっているのかを理解しました。JFrame のサイズを指定すると、この動作が発生しているようです。その行を削除するとすぐに、JList は期待どおりにレンダリングを開始しました。JScrollPane にラップされ、現在も動作します。

4

1 に答える 1

1

レイアウトに接着剤を追加します。接着剤は、コンポーネントで使用されていない残りのパネル幅を占めます。このコード行を、パネル内の残りのスペースを占める場所に配置します。

h.add(Box.createHorizontalGlue());

また、質問のコメントに記載されているように、BoxLayout を使用すると、配置情報は必要ありません。したがって、これを簡単に使用できます。

h.add(someOtherPanel);

これの代わりに:

h.add(someOtherPanel, BorderLayout.WEST);

于 2012-08-17T23:51:33.217 に答える