【问题标题】:setAlignmentX(CENTER_ALIGNMENT) does not center boxLayout in JFramesetAlignmentX(CENTER_ALIGNMENT) 不在 JFrame 中居中 boxLayout
【发布时间】:2014-10-02 20:57:45
【问题描述】:

我想让我的两个 JLabel 文本保持左对齐,同时将我的 boxLayout 放在 JFrame 的中心。

我在我的 boxlayout 面板上尝试了 setAlignmentX(CENTER_ALIGNMENT),但它没有将我的 boxlayout 放在中心。

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GuiTest extends JFrame {

    private static final long serialVersionUID = 1L;
    private JLabel jLabelOne = new JLabel();    
    private JLabel jLabelTwo = new JLabel();
    private JPanel panel = new JPanel();
    private BoxLayout boxLayout = new BoxLayout(panel,BoxLayout.Y_AXIS);
    public GuiTest() {

        jLabelOne.setAlignmentX(LEFT_ALIGNMENT);
        jLabelTwo.setAlignmentX(LEFT_ALIGNMENT);

        jLabelOne.setText("This is text one");
        jLabelTwo.setText("This is text two");
        panel.setLayout(boxLayout);
        panel.add(jLabelOne);
        panel.add(jLabelTwo);

        panel.setAlignmentX(CENTER_ALIGNMENT);
        add(panel);
        pack();
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setSize(1024,768);
        setLocationRelativeTo(null);   
        setVisible(true);
    }

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

【问题讨论】:

    标签: java swing layout-manager boxlayout


    【解决方案1】:

    这不会实现我相信的任何事情:

    panel.setAlignmentX(CENTER_ALIGNMENT);
    

    因为您将面板添加到 JFrame 的 contentPane(一个使用 BorderLayout 的容器)中,并且实际上是以默认方式添加它,即 BorderLayout.CENTER。

    考虑给 contentPane 一个 GridBagLayout,并以默认方式添加面板 JPanel,它应该居中。只有当它的首选大小小于该 JFrame 的 contentPane 时,才会看到这一点。

    【讨论】:

      【解决方案2】:
      import javax.swing.BoxLayout;
      import javax.swing.JFrame;
      import javax.swing.JLabel;
      import javax.swing.JPanel;
      
      public class GuiTest extends JFrame {
      
          private static final long serialVersionUID = 1L;
          private JLabel jLabelOne = new JLabel();    
          private JLabel jLabelTwo = new JLabel();
          private JPanel panel = new JPanel();
          private BoxLayout boxLayout = new BoxLayout(panel,BoxLayout.Y_AXIS);
      
          public GuiTest() {
      
              panel.setLayout(boxLayout);
      
              jLabelOne.setAlignmentX(CENTER_ALIGNMENT);
              jLabelTwo.setAlignmentX(CENTER_ALIGNMENT);
      
              jLabelOne.setText("This is text one");
              jLabelTwo.setText("This is text two");
      
              panel.add(jLabelOne);
              panel.add(jLabelTwo);
      
              panel.setAlignmentX(CENTER_ALIGNMENT);
              add(panel);
              setSize(1024,768);
              setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);      
              setLocationRelativeTo(null);   
              setVisible(true);
          }
      
          public static void main(String args[]) {
              new GuiTest();
          }
      }
      

      这应该可以得到你想要的。你有一些事情不正常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-10
        • 2014-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-28
        • 2016-08-26
        相关资源
        最近更新 更多