我正在尝试将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中,现在也可以工作了。
发布于 2012-08-18 07:51:33
在布局中添加胶水。胶水将占用组件未使用的面板宽度的其余部分。因此,将这行代码放在您想要占据面板中其余空间的位置:
h.add(Box.createHorizontalGlue());此外,正如问题的注释中所指出的,使用BoxLayout不需要任何定位信息。因此,您可以简单地使用以下命令:
h.add(someOtherPanel);
而不是这样:
h.add(someOtherPanel, BorderLayout.WEST);
https://stackoverflow.com/questions/12013709
复制相似问题