我试图阻止JPanel中的GridLayout完全填充单元格并忽略组件的任何setSize
我正在使用此代码:
import javax.swing.*;
import java.awt.*;
public class GrideComponents{
public static void main(String[] args) {
JFrame frame = new JFrame("Laying Out Components in a Grid");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridLayout(5,2,0,0));
panel.add(new JLabel("Enter name"));
JTextField a = new JTextField(5);
a.setSize(10, 10);
panel.add(a);
panel.add(new JLabel("Enter Roll"));
panel.add(new JTextField(3));
panel.add(new JLabel("Enter Class"));
panel.add(new JTextField(3));
panel.add(new JLabel("Enter Total Marks"));
panel.add(new JTextField(3));
panel.add(new JButton("Ok"));
panel.add(new JButton("Cancel"));
frame.add(panel);
frame.setSize(400,400);
frame.setVisible(true);
}
}
每个组件都填充了gris单元,而不是指定的大小。
由于
答案 0 :(得分:1)
您是否尝试过设置setMaximumSize和setPreferredSize?
无论如何,我建议您尝试MiGLayout来满足您的所有布局需求。你会对它的简单性感到惊讶!
答案 1 :(得分:1)
GridLayout的重点是在常规网格中布局组件。布局管理器将覆盖您的setSize
个调用。可能setPreferredSize
或setMaximumSize
可能有效,但布局管理员可以决定将其考虑在内。
答案 2 :(得分:1)
阅读Using Layout Managers上的Swing教程,以便了解布局管理器的工作原理。
GridLayout将所有组件调整为相同大小。
创建表单时,您通常会使用不同的布局管理器嵌套不同的面板,以获得您想要的效果。
在这种情况下,您可以使用FlowLayout作为按钮。然后你可以将GridBagLayout或SpringLayout用于其他组件。
答案 3 :(得分:0)