【问题标题】:How to use GridBagConstraints to create this type of layout?如何使用 GridBagConstraints 来创建这种类型的布局?
【发布时间】:2018-04-05 14:36:55
【问题描述】:

我已经尝试了很多来创建以下布局,但我无法做到。我尝试使用各种约束,但仍然无法做到。

我想要以下布局。

__________________________
| JLABEL          |  J   |
|_________________|  B   |
| JBUTTON         |  T   |
|_________________|__N___|

JBTN is JBUTTON.

我得到的结果是它们都只排成一行。或者有时 JBTN 会出现在左下角,而 JLABEL 和 JBUTTON 会出现在一行中。

所以总的来说我无法得到想要的布局。 任何人都可以在这里提供帮助或提供一些解决方法的建议吗?

【问题讨论】:

  • Can anyone help here or give some advice how to fix it? - 首先阅读 How to Use GridBagLayout 上的 Swing 教程,了解约束的解释和帮助您入门的工作示例。该示例展示了如何让一个组件“跨越多个单元格的宽度”。在您的情况下,您想要“跨越多个单元格的高度”。 2) 如果您仍然有问题,请发布您的minimal reproducible example 来展示问题。我们猜不出你在做什么。

标签: java swing layout-manager gridbaglayout gridlayoutmanager


【解决方案1】:

这似乎是您想要的布局:

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;

public class Answer extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Answer frame = new Answer();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Answer() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        GridBagLayout gbl_contentPane = new GridBagLayout();
        gbl_contentPane.columnWidths = new int[]{302, 89, 0};
        gbl_contentPane.rowHeights = new int[]{115, 128, 0};
        gbl_contentPane.columnWeights = new double[]{0.0, 0.0, Double.MIN_VALUE};
        gbl_contentPane.rowWeights = new double[]{0.0, 0.0, Double.MIN_VALUE};
        contentPane.setLayout(gbl_contentPane);

        JLabel lblNewLabel = new JLabel("New label");
        GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
        gbc_lblNewLabel.fill = GridBagConstraints.BOTH;
        gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5);
        gbc_lblNewLabel.gridx = 0;
        gbc_lblNewLabel.gridy = 0;
        contentPane.add(lblNewLabel, gbc_lblNewLabel);

        JButton btnNewButton = new JButton("New button");
        GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
        gbc_btnNewButton.anchor = GridBagConstraints.WEST;
        gbc_btnNewButton.fill = GridBagConstraints.VERTICAL;
        gbc_btnNewButton.gridheight = 2;
        gbc_btnNewButton.gridx = 1;
        gbc_btnNewButton.gridy = 0;
        contentPane.add(btnNewButton, gbc_btnNewButton);

        JButton btnNewButton_1 = new JButton("New button");
        GridBagConstraints gbc_btnNewButton_1 = new GridBagConstraints();
        gbc_btnNewButton_1.fill = GridBagConstraints.BOTH;
        gbc_btnNewButton_1.insets = new Insets(0, 0, 0, 5);
        gbc_btnNewButton_1.gridx = 0;
        gbc_btnNewButton_1.gridy = 1;
        contentPane.add(btnNewButton_1, gbc_btnNewButton_1);
    }

}

【讨论】:

    猜你喜欢
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    相关资源
    最近更新 更多