GridLayout中的组件与JPanel错误地填充网格

时间:2010-11-06 11:23:02

标签: java swing jpanel grid-layout

我试图阻止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单元,而不是指定的大小。

由于

4 个答案:

答案 0 :(得分:1)

您是否尝试过设置setMaximumSize和setPreferredSize?

无论如何,我建议您尝试MiGLayout来满足您的所有布局需求。你会对它的简单性感到惊讶!

答案 1 :(得分:1)

GridLayout的重点是在常规网格中布局组件。布局管理器将覆盖您的setSize个调用。可能setPreferredSizesetMaximumSize可能有效,但布局管理员可以决定将其考虑在内。

答案 2 :(得分:1)

阅读Using Layout Managers上的Swing教程,以便了解布局管理器的工作原理。

GridLayout将所有组件调整为相同大小。

创建表单时,您通常会使用不同的布局管理器嵌套不同的面板,以获得您想要的效果。

在这种情况下,您可以使用FlowLayout作为按钮。然后你可以将GridBagLayout或SpringLayout用于其他组件。

答案 3 :(得分:0)

在此上下文中,

BoxLayout是一个有用的替代方案,如example所示。