如何将所有Swing组件对齐到JPanel/JFrame的左上角

3

我创建了一个简单的程序,其中有1个JLabel,上面写着“您想继续吗?”和2个JButton,一个写着是,另一个写着否。

我使用GridBagLayout来组织JPanel / JFrame。我的程序编译和运行都很好,但是GridBagLayout将所有组件都居中放置在JFrame的中心。由于我对swing不熟悉,可以有人向我展示如何将所有组件对齐到JFrame的左上角吗?


你使用集成开发环境吗? - Rabbit Guy
除非你在做作业,否则请考虑使用JOptionPane,它是常见对话框的核心Swing功能,例如:JOptionPane.showConfirmDialog(null, "Would you like to continue", "Continue?", JOptionPane.YES_NO_OPTION); - Adam
2个回答

3

可能不是一个真正的答案,但是:停止使用GridBagLayout。它有太多陷阱,使用起来非常脆弱,所以请不要使用它。

使用更好的替代方案,如MigLayout,并学习它。除非你确实需要,否则不要费心学习Java的默认布局管理器。

以下是使用MigLayout的示例:

JPanel panel = new JPanel(new MigLayout("","",""));

panel.add(myJButton1, "wrap");
panel.add(myJButton2, "wrap");
panel.add(myJButton3, "wrap");
panel.add(myJButton4, "wrap");
panel.add(myJButton5, "wrap");
panel.add(myJButton6, "wrap");

enter image description here


谢谢你们两个的反馈!我会尝试你们俩的方法的,谢谢! :) - shrillhook

2

有几种方法可以实现,您可以先将所有组件添加到另一个容器中,然后在您的容器中布局该容器,但基本原则仍然保持不变...

Example

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc= new GridBagConstraints();
            gbc.weightx = 1;
            gbc.anchor = GridBagConstraints.WEST;
            gbc.gridwidth = GridBagConstraints.REMAINDER;

            for (int index = 0; index < 10; index++) {
                add(new JButton("Test"), gbc);
            }

            gbc.weighty = 1;
            add(new JLabel(), gbc);
        }

    }

}

基本上,这将向最后一行添加一个“隐藏”的组件,该组件希望使用容器的剩余空间,将组件强制移到容器的顶部/左侧角落。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接