1

我试图阻止 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

4 回答 4

1

阅读有关使用布局管理器的 Swing 教程,以便了解布局管理器如何工作的基础知识。

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

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

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

于 2010-11-06T15:35:08.137 回答
1

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

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

于 2010-11-06T11:49:42.060 回答
1

GridLayout 的重点是将组件布局在规则的网格中。您的setSize调用将被布局管理器覆盖。可能setPreferredSizesetMaximumSize可能有效,但由布局管理器决定是否考虑它们。

于 2010-11-06T11:57:32.157 回答
0

BoxLayout如本例所示,在这种情况下是一个有用的替代方案。

于 2010-11-06T18:46:37.503 回答