代码之家  ›  专栏  ›  技术社区  ›  SamHoque

JLabel自动将其自身居中于GridBagLayout内

  •  1
  • SamHoque  · 技术社区  · 6 年前

    我在试着做一个定制 JTextField JLabel ,所以我已经包好了 文本框 标签类 在扩展的自定义类中 JPanel

    布局设置为GridBagLayout,因为我只需要垂直放置2个组件。下面是它的样子

    enter image description here

    setLayout(new GridBagLayout());
    jLabel = new JLabel();
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.fill = GridBagConstraints.VERTICAL;
    gbc.gridy = 1;
    add(jLabel, gbc);
    

    enter image description here

    我希望JLabel与GIF中显示的位置相同。我怎样才能做到这一点?如果有人能指出确切的文本大小在JLabel上看起来会好一些,那也很好。

    2 回复  |  直到 6 年前
        1
  •  0
  •   camickr    6 年前

    JLabel不是从测线开始,也不是从中心开始。有点介于两者之间

    我不确定您的确切代码是什么,以及如何将自定义面板嵌套到另一个面板中。

    但是正如我上面提到的,当你有奇怪的对齐方式时,你需要确保每个组件都有相同的x对齐方式,这样它们可以以相同的方式对齐。

    我无法使用下面的简单示例重现您的问题:

    import java.awt.*;
    import javax.swing.*;
    import javax.swing.border.*;
    
    public class SSCCE extends JPanel
    {
        SSCCE()
        {
            JPanel box = new JPanel();
            box.setLayout( new BoxLayout(box, BoxLayout.Y_AXIS) );
            box.setBorder( new LineBorder(Color.RED) );
    
            JTextField textField = new JTextField(10);
            //textField.setAlignmentX(JComponent.LEFT_ALIGNMENT);
            System.out.println( textField.getAlignmentX() );
            box.add( textField );
    
    
            JLabel label = new JLabel("Some text");
            System.out.println( label.getAlignmentX() );
            box.add( label );
    
            add( box );
        }
    
        private static void createAndShowGUI()
        {
            JFrame frame = new JFrame("SSCCE");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new SSCCE());
            frame.pack();
            frame.setLocationByPlatform( true );
            frame.setVisible( true );
        }
    
        public static void main(String[] args) throws Exception
        {
            java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
    /*
            EventQueue.invokeLater(new Runnable()
            {
                public void run()
                {
                    createAndShowGUI();
                }
            });
    */
        }
    }
    

    但是,从输出中可以看到,默认情况下,文本字段具有中心对齐和标签左对齐。试着让它们都左对齐。

        2
  •  0
  •   SamHoque    6 年前

    幸亏 VGR LINE_STARTS

    gbc.anchor = GridBagConstraints.LINE_STARTS;
    

    编辑:由于 camickr