gpt4 book ai didi

java - JList 太宽?

转载 作者:行者123 更新时间:2023-12-01 15:13:16 27 4
gpt4 key购买 nike

我正在尝试将 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 中,现在也可以使用。

最佳答案

向布局添加胶水。胶水将占据组件未使用的其余面板宽度。因此,请将这行代码放在您想要占据面板中剩余空间的位置:

h.add(Box.createHorizontalGlue());

此外,正如问题评论中所述,使用 BoxLayout 您不需要任何定位信息。所以你可以简单地使用这个:

h.add(someOtherPanel);

而不是这个:

h.add(someOtherPanel, BorderLayout.WEST);

关于java - JList 太宽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12013709/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com