Java 防止JScrollPane中的JPanel水平增长

Java 防止JScrollPane中的JPanel水平增长,java,swing,jpanel,jscrollpane,flowlayout,Java,Swing,Jpanel,Jscrollpane,Flowlayout,我有一个带有FlowLayout的JPanel,我用相同的组件(MWE中的JButtons)动态填充它。JPanel位于JScrollPane中。当我添加组件时,我希望它们从左到右填充,一旦最上面的一行变得比JScrollPane更宽,就向下踢到下一行 我的问题是FlowLayout反而拓宽了JPanel ad nauseum,JScrollPane通过添加一个水平滚动条来响应它。我如何防止这种情况 编辑:我看过WrapLayout;我希望在标准Java中找到一个解决方案,因为我正在为我的应用程

我有一个带有FlowLayout的JPanel,我用相同的组件(MWE中的JButtons)动态填充它。JPanel位于JScrollPane中。当我添加组件时,我希望它们从左到右填充,一旦最上面的一行变得比JScrollPane更宽,就向下踢到下一行

我的问题是FlowLayout反而拓宽了JPanel ad nauseum,JScrollPane通过添加一个水平滚动条来响应它。我如何防止这种情况

编辑:我看过WrapLayout;我希望在标准Java中找到一个解决方案,因为我正在为我的应用程序使用NetBeans GUI Builder

MWE基于:


尝试设置面板的首选大小:

this.panel.setPreferredSize(new Dimension(500, 500));

这在标准JDK布局管理器中不受支持。检查:一个解决方案。好吧,那太可怕了。Oracle一定很喜欢horiscrolling。
我希望在标准Java中找到一个解决方案,因为我使用的是NetBeans GUI Builder
-使用IDE并不会阻止您使用其他类。我知道,但我手写或使用外部库越多,我就越不能利用可视化GUI Builder。你在想这个问题。IDE正在控制/限制您可以做的事情。如果你有不同的想法,你需要重新学习IDE。最好学习如何使用Java以及IDE如何提供帮助。IDE对于基本的编码和调试是很好的,但是不要让它控制你如何设计应用程序。(1-)那么首选的大小永远不会随着你添加/删除组件或者框架大小的改变而改变。设置首选尺寸是布局管理器的工作。@camickr您试过了吗?因为我这样做了,并且在调整帧大小时大小会发生变化。这只是一个解决办法,我相信有更好的方法可以做到这一点。问题是,首选大小不会动态重新计算,而您给出的大小只是一个猜测。滚动只会工作到它不工作为止,因为它不是基于组件的实际布局
我确信有更好的方法可以做到这一点。
-请参阅我原始评论中的链接。我已经看过了,我添加了我的答案,因为OP正在标准java中寻找一些东西。无论如何谢谢你!这并不能解决问题。也许你还不明白这个问题?。将您的建议更改为使用首选尺寸(200110),并在框架上使用pack()而不是setSize()。现在,当您单击按钮时,按钮将以2换行,这对于前6个按钮非常有效。然后尝试添加第7个。您将只看到第7个按钮的一半,并且不会出现滚动条。查看按钮的唯一方法是调整框架的大小。JScrollPane的要点是滚动条应该在需要时出现。此逻辑取决于动态首选尺寸计算。
this.panel.setPreferredSize(new Dimension(500, 500));