如图所示:外部是JPanel_1 BorderLayout
;左侧是JPanel_1西侧的JPanel_2,它使用GridBadLayout
;在JPanel_2中有几个面板,每个面板包含多个JButton
。
问题是,当JPanel_3使用FlowLayout
时,我尝试使用最大宽度设置它,以便当按钮太多时按钮会自动更改行。但是,无论使用JPanel
,size
,maximumSize
设置哪个preferred size
,它都无法正常工作。按钮保持在一行,使得JPanel对我来说太宽了。
任何人都有解决方案吗?谢谢!
答案 0 :(得分:3)
这样当按钮太多时按钮会自动改变线条。
您可以使用Wrap Layout。当可用宽度发生变化时,它会将组件动态地流向新行。
WrapLayout是FlowLayout的扩展,它将在组件包装时正确计算面板的首选大小。
答案 1 :(得分:2)
您可以扩展FlowLayout以限制像这样的首选宽度
import javax.swing.*;
import java.awt.*;
public class TestMaxWidthFlowLayout {
public static void main(String[] args) {
JFrame f=new JFrame();
JPanel pButtons=new JPanel(new FlowLayout() {
public Dimension preferredLayoutSize(Container target) {
Dimension sd=super.preferredLayoutSize(target);
sd.width=Math.min(200, sd.width);
return sd;
}
});
for (int i=0;i<20; i++) {
pButtons.add(new JButton("b-"+i));
}
f.add(pButtons, BorderLayout.WEST);
f.add(new JLabel("center"), BorderLayout.CENTER);
f.setSize(500, 300);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}