java - 如何使用 GridBagLayout 让所有组件出现在 JPanel 的中心?

标签 java swing jpanel layout-manager gridbaglayout

我有以下代码。但我希望所有组件都出现在 JPanel 的中心。我已经为此花费了无数时间,但每次都失败了。有人可以帮忙吗?

package tg.com.bugtracker;

import java.awt.*;

import javax.swing.*;

@SuppressWarnings("serial")
public class LoginPanel extends JPanel {    
    LoginPanel() {
        GridBagLayout layout = new GridBagLayout();
        setLayout(layout);
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.gridx = 0;
        constraints.gridy = 0;
        constraints.anchor = GridBagConstraints.LAST_LINE_END;
        add(new JLabel("Username"), constraints);
        constraints.gridx = 1;
        constraints.gridy = 0;
        constraints.anchor = GridBagConstraints.LAST_LINE_START;
        JComboBox<String> combobox = new JComboBox<>();
        combobox.setPreferredSize(new Dimension(250, 20));
        add(combobox, constraints);
        constraints.gridx = 0;
        constraints.gridy = 1;
        constraints.anchor = GridBagConstraints.FIRST_LINE_END;
        add(new JLabel("Password"), constraints);
        constraints.gridx = 1;
        constraints.gridy = 1;
        constraints.anchor = GridBagConstraints.FIRST_LINE_END;
        JTextField textfield = new JTextField();
        textfield.setPreferredSize(new Dimension(250, 20));
        add(textfield, constraints);
    }
}

最佳答案

将一组组件置于 GUI 区域中心的一种相当简单的方法是将它们放置在面板中并创建一个 (或另一个)带有 GridBagLayout 的面板。然后将带有组件的面板作为单个组件放入GBL中 没有约束的组件。工作完成!

<小时/>

顺便说一句,当我创建该代码的 MCVE(最小完整可验证示例)时,我删除了一个实例 将 LoginPanel 放入 BorderLayoutCENTER 中,它看起来确实居中。

一般提示

参见Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing? (是的。)

文本字段的大小可以通过列数和字体大小来建议。 组合框将采用内容的大小,这取决于最宽的组合项和使用的渲染器。

关于java - 如何使用 GridBagLayout 让所有组件出现在 JPanel 的中心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30351639/

相关文章:

java - 禁用具有视觉效果的 JPanel

java - (Java) BorderLayout 中的 JPanel 未填充我想要的尺寸

java - 如何使 JScrollPane 可调整大小

java - GWT 中的还原(撤消)实现

java - 为什么编译器在进行 "bad"转换时不给出错误?

java - ActionListener 未按预期工作

java - 如何翻转绘制矩形以使其绘制出来?

java - 对绘制的对象进行动画处理

java - JPanel 中的重绘查询

java - 如何创建文件并写入文件?