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

GridBagLayout困难

顾乐池
2023-03-14

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

共有2个答案

施宏大
2023-03-14

恐怕这是不可能的。GridBagLayout无法计算出C1开始和C3开始之间的适当距离。

沈龙光
2023-03-14

>

只需填写第一行(仅)中所有所需的列数,即可创建矩阵,您可以定义GBC weightx、weighty、gridx、gridy和/或锚定

示例讨论

import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;

public class GbcLayout {

    private JFrame frame = new JFrame("GbcLayoutGbcLayout");
    private JPanel panel = new JPanel();
    private JLabel hidelLabel;
    private JLabel firstLabel;
    private JTextField firstText;

    public GbcLayout() {
        panel.setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        panel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
        for (int k = 0; k < 50; k++) {
            hidelLabel = new JLabel("     ");
            hidelLabel.setOpaque(true);
            hidelLabel.setBackground(Color.orange);
            hidelLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.weightx = 0.5;
            gbc.weighty = 0.5;
            gbc.gridx = k;
            gbc.gridy = 0;
            panel.add(hidelLabel, gbc);
        }
        for (int k = 0; k < 5; k++) {
            firstLabel = new JLabel("Testing Label : ", SwingConstants.RIGHT);
            firstLabel.setFont(new Font("Serif", Font.BOLD, 20));
            firstLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.insets = new Insets(0, 0, 5, 0);
            gbc.gridx = 0;
            gbc.gridwidth = 8;
            gbc.gridy = k + 1;
            panel.add(firstLabel, gbc);
        }
        for (int k = 0; k < 5; k++) {
            firstText = new JTextField("Testing TextField");
            firstText.setFont(new Font("Serif", Font.BOLD, 20));
            firstText.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.insets = new Insets(0, 0, 5, 0);
            gbc.gridx = 9;
            gbc.gridwidth = k + 8;
            gbc.gridy = k + 1;
            panel.add(firstText, gbc);
        }
        for (int k = 0; k < 5; k++) {
            firstLabel = new JLabel("Testing Label : ", SwingConstants.RIGHT);
            firstLabel.setFont(new Font("Serif", Font.BOLD, 20));
            firstLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.insets = new Insets(0, 0, 5, 0);
            gbc.gridx = 20 + k;
            gbc.gridwidth = 8;
            gbc.gridy = k + 1;
            panel.add(firstLabel, gbc);
        }
        for (int k = 0; k < 5; k++) {
            firstText = new JTextField("Testing TextField");
            firstText.setFont(new Font("Serif", Font.BOLD, 20));
            firstText.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.insets = new Insets(0, 0, 5, 0);
            gbc.gridx = 29 + k;
            gbc.gridwidth = 21 - k;
            gbc.gridy = k + 1;
            panel.add(firstText, gbc);
        }
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                GbcLayout gbcl = new GbcLayout();
            }
        });
    }
}
 类似资料:
  • 介绍 (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。我需要一个垂直和水平居中的JLabel-这很容易,我甚至不需要创建任何GridBagConstraints。我还想在右下角放置一个JButton,当我尝试这样做时,我的中间面板会向左移动,或者按钮会向上移动。 我还试图使用这里描述的其他约束http://docs.oracle.com/javase/tutorial/uiswing/layout/gridb

  • 我在一个JPanel中有3个组件,其中GridBagLayout是JPanel的LayoutManager,并在这3个组件上使用GridBagConstraints。 使用当前代码(如下所示),3个元素会正确地出现在面板上。问题是第一个组件是一个JLabel,它有时很长,如果是这样的话,它就会扩展,使其他两个组件变小。 我的目标是拥有一个GridBagLayout为1行4列的JPanel,其中第一