Java GridLayout中带有JPanel的组件不正确地填充网格
我试图阻止JPanel中的GridLayout完全填充单元格并忽略组件的任何设置大小 我正在使用以下代码:Java GridLayout中带有JPanel的组件不正确地填充网格,java,swing,jpanel,grid-layout,Java,Swing,Jpanel,Grid Layout,我试图阻止JPanel中的GridLayout完全填充单元格并忽略组件的任何设置大小 我正在使用以下代码: 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.setDe
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单元,而不是指定的大小
谢谢您尝试过设置setMaximumSize和setPreferredSize吗
无论如何,我建议您尝试满足所有布局需求。你会惊讶于它的简单 GridLayout的全部要点是在规则网格中布局组件。布局管理器将覆盖您的
setSize
调用。可能setPreferredSize
或setMaximumSize
可以工作,但这取决于布局管理器决定是否考虑它们。阅读上的Swing教程,以便了解布局管理器工作的基本原理
GridLayout将所有组件的大小调整为相同的大小
创建表单时,通常会使用不同的布局管理器嵌套不同的面板,以获得所需的效果
在这种情况下,您可以为按钮使用FlowLayout。然后,您可以对其他组件使用GridBagLayout或SpringLayout。在这种情况下是一个有用的替代方案,如图所示。-1使用setPreferredSize()或setMaximumSize()在使用GridBlayout时没有效果。阅读API文档或Swing教程。GridLayout的全部要点是,每个组件的大小都会调整为添加到网格中的最大组件的大小。这就是为什么我说:“可能……可以工作,但取决于布局管理器”。OP也可以阅读文档,否?GridLayout是一个具有简单规则的简单布局管理器。我要投反对票的理由和jackrabbit解释的一样。我相信人们在使用/推荐第三方库之前应该知道默认布局管理器是如何工作的。虽然我同意这一点,但我相信MiGLayout可能是一个例外,因为a)这个布局管理器可以取代所有内置的管理器b)它的大小非常小(~75KB),c)(许多人希望它包含在JDK 7中)谢谢你的回答,我会试试你的建议。与此同时,我刚刚创建了几个带有网格布局的面板,以便更好地放置组件。