由“中间”面板分隔的两个JLists的布局?(Java Swing)

由“中间”面板分隔的两个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占据所有可用的水平空间。我该怎么做?基本上,我想要的外观是这样的 您

我正在使用BoxLayout水平布局一行中的3个组件-两个JLists J1和J2以及一个位于X之间的JPanel

---------------
|             |
|             |
|  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);