我有一个带有FlowLayout的JPanel,我正在用相同的组件(MWE中的JButtons(动态填充它。JPanel 位于 JScrollPane 中。当我添加组件时,我希望它们从左到右填充,一旦顶行变得比 JScrollPane 宽,就踢到下一行。
我的问题是 FlowLayout 反而扩大了 JPanel ad nauseum,JScrollPane 通过添加水平滚动来响应。我该如何防止这种情况?
编辑:我看过包装布局;我希望在标准 Java 中使用解决方案,因为我正在为我的应用程序使用 NetBeans GUI Builder。
MWE基于这个答案:
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
import javax.swing.JScrollPane;
public class MWE extends JFrame implements ActionListener {
JPanel panel;
JScrollPane pane;
public MWE() {
super("Add component on JFrame at runtime");
setLayout(new BorderLayout());
this.panel = new JPanel();
this.pane = new JScrollPane();
this.panel.setLayout(new FlowLayout(FlowLayout.LEFT));
this.pane.setViewportView(this.panel);
add(pane, BorderLayout.CENTER);
JButton button = new JButton("CLICK HERE");
add(button, BorderLayout.SOUTH);
button.addActionListener(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 500);
setVisible(true);
}
public void actionPerformed(ActionEvent evt) {
this.panel.add(new JButton("Button"));
this.panel.revalidate();
validate();
}
public static void main(String[] args) {
MWE mwe = new MWE();
}
}
尝试为面板设置首选大小:
this.panel.setPreferredSize(new Dimension(500, 500));