当前位置: 首页 > 知识库问答 >
问题:

GridBagLayout问题

韦澄邈
2023-03-14

我正在尝试使用GridBagLayout。我需要一个垂直和水平居中的JLabel-这很容易,我甚至不需要创建任何GridBagConstraints。我还想在右下角放置一个JButton,当我尝试这样做时,我的中间面板会向左移动,或者按钮会向上移动。

EXPECTING     GETTING THIS  OR THIS
+-----------+ +-----------+ +-----------+
|           | |           | |           |
|           | |           | |           |
|           | |           | |           |
|   +---+   | | +---+     | | +---+     |
|   |   |   | | |   |     | | |   |     |
|   +---+   | | +---+     | | +---++---+|
|           | |           | |      |   ||
|           | |           | |      +---+|
|       +---+ |       +---+ |           |
|       |   | |       |   | |           |
+-------+---+ +-------+---+ +-----------+

bigPanel = new JPanel();
bigPanel.setPreferredSize(new Dimension(320, 640));
bigPanel.setLayout(new GridBagLayout());

label = new JLabel();
label.setPreferredSize(new Dimension(100,95));

button = new JButton();
button.setPreferredSize(new Dimension(100,25));

GridBagConstraints c = new GridBagConstraints();

c.anchor = GridBagConstraints.CENTER;
bigPanel.add(label, c);

c.anchor = GridBagConstraints.LAST_LINE_END;
bigPanel.add(button, c);

我还试图使用这里描述的其他约束http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html但每次出了问题。

共有1个答案

窦哲彦
2023-03-14

如果组件没有填充单元格,则设置组件在其单元格内的位置。

您没有定义布局的网格。默认行为是从左到右添加组件。

下面是一个使用GridBagLayout实现所需功能的示例。标签和按钮放在同一单元格中,填充面板。

public class Test extends JPanel {
    public Test() {
        super();
        GridBagLayout gridBagLayout = new GridBagLayout();
        gridBagLayout.columnWeights = new double[] { 1.0 }; // expands the  1rst cell of the layout on the vertical axis
        gridBagLayout.rowWeights = new double[] { 1.0 }; // expands the 1rst cell of the layout on the horizontal axis
        setLayout(gridBagLayout);

        JLabel label = new JLabel("test");          
        label.setOpaque(true);
        label.setBackground(Color.RED);
        label.setPreferredSize(new Dimension(100, 95));
        GridBagConstraints gbc_label = new GridBagConstraints();
        gbc_label.gridx = 0; // set label cell (0,0)
        gbc_label.gridy = 0;
        gbc_label.insets = new Insets(0, 0, 5, 5);

        add(label, gbc_label);

        JButton button = new JButton("button");
        GridBagConstraints gbc_button = new GridBagConstraints();
        gbc_button.gridx = 0; // set buttoncell (0,0)
        gbc_button.gridy = 0;
        gbc_button.anchor = GridBagConstraints.SOUTHEAST;

        add(button, gbc_button);
        button.setPreferredSize(new Dimension(100, 25));
    }
}
 类似资料:
  • 我使用创建面板。 我想要面板右角的删除图标。但是,如果未将添加到面板中,删除图标将向左移动。 如何正确地做到这一点? 这是我的GridBagLayout面板设置代码 有添加组件到面板的代码

  • 介绍 (Introduction) GridBagLayout类以水平和垂直方式排列组件。 类声明 以下是java.awt.GridBagLayout类的声明: public class GridBagLayout extends Object implements LayoutManager2, Serializable 字段 (Field) 以下是java.awt.Bord

  • 介绍 (Introduction) GridBagLayout类以水平和垂直方式排列组件。 Class 声明 (Class Declaration) 以下是java.awt.GridBagLayout类的声明 - public class GridBagLayout extends Object implements LayoutManager2, Serializable 字

  • 主要内容:1 Java GridBagLayout的介绍,2 Java GridBagLayout的字段,3 Java GridBagLayout的方法,4 Java GridBagLayout的案例1,5 Java GridBagLayout的案例21 Java GridBagLayout的介绍 Java GridBagLayout类用于垂直,水平或沿其基线对齐组件。 组件的大小可能不同。每个GridBagLayout对象都维护一个动态的矩形单元格网格。每个组件占据一个或多个单元格(称为其显示

  • 在具有1列和多行的面板中使用方框布局求解。

  • 我只想使用GridBagLayout布局组件,如图所示 我尝试了几个约束,但最终都没有得到预期的结果,所以我想知道,仅使用GridBagLayout是否真的可行。困难在于C1、C2和C3部件 C1和C2是一个组件,它将容纳其他组件,如JPanel。我已经设置了它们的最小尺寸和首选尺寸。C3是一个按钮 GUI无法调整大小 这个布局管理器我已经用了好几次了,但还是不太熟练,谢谢你的帮助。