Java 在网格袋布局中强制JScrollPane上的水平滚动条

Java 在网格袋布局中强制JScrollPane上的水平滚动条,java,swing,jscrollpane,jlist,Java,Swing,Jscrollpane,Jlist,我有一个swing JPanel,它使用GridBagLayout,在JScrollPane中有一个JLabel(图像)和一个JList,每个占据50%的宽度 JScrollPane scroll = new JScrollPane(); scroll.setPreferredSize(new Dimension(40, 40)); JList list = new JList(); scroll.setViewportView(list); parent.add(scroll, new Gri

我有一个swing JPanel,它使用GridBagLayout,在JScrollPane中有一个JLabel(图像)和一个JList,每个占据50%的宽度

JScrollPane scroll = new JScrollPane();
scroll.setPreferredSize(new Dimension(40, 40));
JList list = new JList();
scroll.setViewportView(list);
parent.add(scroll, new GridBagConstraints(x,y,1,1, xWeight,yWeight, GridBagConstraints.CENTER,GridBagConstraints.BOTH, insets, 0,0));
这很有效,除非我在JList中添加了一个很长的字符串。 然后,JScrollPane将占据JPanel的所有区域,而不是水平滚动,在JLabel中留下一个小图像

奇怪的是,如果我将窗口的大小调整为小于长字符串的宽度,那么它将开始使用水平滚动并返回到50%/50%宽度

如何强制JList始终使用卷轴,并且仅占用50%的宽度

(必须使用GridBagLayout)


欢迎光临,

我通过在滚动窗格上设置一个非常小的首选大小来解决这个问题。 这似乎使它出于某种原因使用滚动条,并保持50%的宽度

JScrollPane scroll = new JScrollPane();
scroll.setPreferredSize(new Dimension(40, 40));
JList list = new JList();
scroll.setViewportView(list);
parent.add(scroll, new GridBagConstraints(x,y,1,1, xWeight,yWeight, GridBagConstraints.CENTER,GridBagConstraints.BOTH, insets, 0,0));

你已经在这里很久了,知道这个网站是如何运作的。。。你带着一个,我们可以从那里知道发生了什么…有很多方法可以做到这一点。对每个组件应用
0.5
或更大的
weightx
,可能会解决此问题。同样,使用
GridLayout
也可以获得与您尝试使用JScrollPane.HORIZONTAL\u SCROLLBAR\u ALWAYS<代码>使用GridBagLayout,在JScrollPane中使用JLabel(图像)和JList,每个都占据50%的宽度。-GridBagLayout不是这样工作的。GridBagLayout将尝试以其首选大小显示所有组件。weightx约束仅用于“额外”空间。GridLayout是为了给组件提供相等的空间。@Ansharja,这没有任何作用。所做的只是画一个滚动条。它不会激活滚动条。只有当组件的首选大小大于滚动窗格的大小时,滚动条才会激活。这由布局管理器控制,因为它最终控制滚动窗格的大小。