Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GridLayout中带有JPanel的组件不正确地填充网格_Java_Swing_Jpanel_Grid Layout - Fatal编程技术网

Java GridLayout中带有JPanel的组件不正确地填充网格

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

我试图阻止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.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中)谢谢你的回答,我会试试你的建议。与此同时,我刚刚创建了几个带有网格布局的面板,以便更好地放置组件。