由“中间”面板分隔的两个JLists的布局?(Java Swing)
我正在使用BoxLayout水平布局一行中的3个组件-两个JLists J1和J2以及一个位于X之间的JPanel由“中间”面板分隔的两个JLists的布局?(Java Swing),java,swing,layout,layout-manager,Java,Swing,Layout,Layout Manager,我正在使用BoxLayout水平布局一行中的3个组件-两个JLists J1和J2以及一个位于X之间的JPanel --------------- | | | | | J1 X J2 | | | | | --------------- 我遇到的问题是,BoxLayout使每个列的大小相等,但我希望X是它的最小大小,J1和J2占据所有可用的水平空间。我该怎么做?基本上,我想要的外观是这样的 您
---------------
| |
| |
| J1 X J2 |
| |
| |
---------------
我遇到的问题是,BoxLayout使每个列的大小相等,但我希望X是它的最小大小,J1和J2占据所有可用的水平空间。我该怎么做?基本上,我想要的外观是这样的
您应该使用setPreferredSize和setMinimumSize方法。这些选项可与此方法结合使用,以使窗格大小与屏幕大小不符:
屏幕维度dim=Toolkit.getDefaultToolkit.getScreenSize
虽然您可能只是将窗口设置为固定大小
对于列表,您应该将项目添加到JPanel中,根据对象的数量设置面板的大小,然后使用setViewPort将JScrollPane视图设置为该JPanel,以确保滚动窗格的大小正确。在列表之间粘贴水平胶:
box.add(Box.createHorizontalGlue())
我会用一个
中央按钮将包含在JPanel中
JList、button JPanel和JList将包含在一行中,行中有3个元素 后SSCCE。据我所知,框布局允许不同大小的列。X的首选大小是多少?为什么需要SSCCE?它是由中间组件分隔的两个JLists,它们都使用相同的布局管理器。没有比这更清楚的了。如果你发布了SSCCE,我&可能其他人可以在发布之前用它检查答案。但是,嘿,这是你的问题,所以如果你对答案不太感兴趣,不要麻烦。顺便说一句,我不相信@StanislavL会收到你的评论。添加@PersonName以确保他们得到通知。另请参见?是的,我最终这样做了。我使两个JLists的权重x/weighty都为1,并将两者都填充;我将中间面板的权重x/weighty设置为0,填充为0。
JPanel panel_20 = new JPanel();
tabbedPane_2.addTab("New tab", null, panel_20, null);
panel_20.setLayout(new BoxLayout(panel_20, BoxLayout.X_AXIS));
JPanel panel_24 = new JPanel();
panel_24.setBorder(new EmptyBorder(3, 3, 3, 3));
panel_20.add(panel_24);
panel_24.setLayout(new BorderLayout(0, 0));
JList list_7 = new JList();
list_7.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
panel_24.add(list_7);
JPanel panel_25 = new JPanel();
panel_20.add(panel_25);
panel_25.setLayout(new BoxLayout(panel_25, BoxLayout.Y_AXIS));
JButton btnNewButton_4 = new JButton(">");
panel_25.add(btnNewButton_4);
JButton btnNewButton_5 = new JButton("<");
panel_25.add(btnNewButton_5);
JPanel panel_26 = new JPanel();
panel_26.setBorder(new EmptyBorder(3, 3, 3, 3));
panel_20.add(panel_26);
panel_26.setLayout(new BorderLayout(0, 0));
JList list_8 = new JList();
list_8.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
panel_26.add(list_8, BorderLayout.CENTER);