Java Swing(BoxLayout)对齐问题

Java Swing(BoxLayout)对齐问题,java,swing,user-interface,boxlayout,Java,Swing,User Interface,Boxlayout,我对javaswing非常陌生,在设计一个好的布局时遇到了很多问题。我已经查看了谷歌,甚至这个网站上的其他答案,但我发现没有任何信息能够解决这个问题。以下是我努力的结果: 如您所见,标签、文本字段和按钮都不对齐。我的目标是使它们都具有相同的左边框,使按钮和文本字段具有相同的右边框,并且这些左边框和右边框与窗口的左边框和右边框的距离相同 以下是我的代码的重要部分: public void run() { JFrame frame = new JFrame("Ar

我对javaswing非常陌生,在设计一个好的布局时遇到了很多问题。我已经查看了谷歌,甚至这个网站上的其他答案,但我发现没有任何信息能够解决这个问题。以下是我努力的结果:

如您所见,标签、文本字段和按钮都不对齐。我的目标是使它们都具有相同的左边框,使按钮和文本字段具有相同的右边框,并且这些左边框和右边框与窗口的左边框和右边框的距离相同

以下是我的代码的重要部分:

    public void run()
    {
         JFrame frame = new JFrame("Arduino Server");
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         InstancePanel = new ServerGUIPanel();
         frame.getContentPane().add(InstancePanel);
         frame.pack();
         frame.setVisible(true);
    }
在ServerGUIPanel.java中:

    public ServerGUIPanel()
    {
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        setPreferredSize(new Dimension(500, 500));
        setBorder(new EmptyBorder(10, 10, 10, 10));



        StatusLabel = new JLabel("STATUS: BOOTUP");
        add(StatusLabel);

        PortField = new JTextField();
        PortField.setPreferredSize(new Dimension(5000, 20));
        PortField.setMaximumSize(PortField.getPreferredSize());
        PortField.setActionCommand("PortChanged");
        add(PortField);

        ConnectionButton = new JButton();
        ConnectionButton.setPreferredSize(new Dimension(5000, 20));
        ConnectionButton.setMaximumSize(ConnectionButton.getPreferredSize());
        ConnectionButton.setActionCommand("ConnectionClicked");
        add(ConnectionButton);
    }
有人有简单的解决办法吗?我做错了什么

多谢各位


--Georges Oates Larsen

阅读Swing教程中关于使用BoxLayout的基础知识的部分以及关于对齐问题的部分

基本上,您需要确保所有组件的alignmentX值都设置为左对齐

此外:

  • 不要使用setPreferredSize()设置组件的大小。每个回转组件将确定其自己的首选尺寸
  • 使用Java命名约定。变量名不应以大写字符开头

  • 我不建议使用setPreferredSize()和setMaximumSize()。后者在拉伸主框架时会导致问题。[您的组件可能不需要调整大小]

    您应该使用布局管理器自行处理所有路线。在这种情况下,我不会使用BoxLayout,因为不同的组件希望大小不同,这将在添加到BoxLayout面板时影响对齐

    此外,您可能还希望为主框架提供一个布局。
    你能发布你是如何使用GridBagLayout的吗?

    我已经试过了;默认情况下,它们似乎是左对齐的。让我的元素全部左对齐仍然会导致每个元素基本上具有不同的填充/边距。针对#1:如果不使用较大的首选尺寸,您建议如何强制我的按钮扩展到窗口的全宽?
    我已经尝试过了-你做错了什么。发表你的文章,展示你的问题<代码>您建议如何强制我的按钮扩展到窗口的全宽,
    -您需要使用不同的布局管理器。
    GridLayout
    将使所有组件大小相同。或者,您可以使用
    GridBagLayout
    ,为每个组件指定不同的“填充”值。再次阅读本教程,您还可以找到上面关于布局管理器的部分以及工作示例。@GeorgesOatesLarsen如果您不希望JButton填充其行上的所有可用空间,则不太可能希望使用BoxLayout。试试这里推荐的GridBagLayout:@Dæmon,camickr,我明白了!这是有道理的。GridBagLayout似乎正在工作。谢谢你的链接,迪蒙。@peeskillet谢谢你的建议!我最终并没有使用GridLayout,但我确实使用了GridBagLayout,这似乎(到目前为止)起到了作用。