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

时间:2016-04-19 20:48:50

标签: java swing gridbaglayout

嘿伙计们我真的很喜欢Java,但是我已经创建了一个简单的程序,其中有1个JLabel表示你想要继续,2个JButtons表示是,而且是一个说不。

我正在使用GridBaGLayout来组织JPanel / JFrame。我的程序编译并运行得很好,但GridBagLayout将我所有的组件集中在JFrame的中心。由于我刚接触摇摆,有人可以告诉我如何将所有组件对齐到JFrame的左上角?

谢谢! :)

2 个答案:

答案 0 :(得分:2)

这可能不是一个真正的答案,但无论如何:停止使用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

答案 1 :(得分:1)

有几种方法可以做到,您可以先将所有组件添加到另一个容器中,然后在容器中布置该容器,但基本原则仍然存在......

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);
        }

    }

}

基本上,这增加了一个隐藏的&#34;组件到最后一行,它想要用尽容器的剩余空间,将组件强制到容器的左上角

相关问题