我试图制作一个承载JTextField的自定义JLabel,所以我将JTextFieldJLabel包装在扩展了JPanel的自定义类中

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

java - JLabel在GridBagLayout内部自动将其自身居中-LMLPHP

这是代码,我无法发现我指示GridBagLayout将JLabel居中的位置。

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


java - JLabel在GridBagLayout内部自动将其自身居中-LMLPHP

我想让JLabel与GIF中显示的位置相同。我该如何实现?如果任何人都可以指出JLabel上确切的文本大小会很好,那也将很好。

最佳答案

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();
            }
        });
*/
    }
}


但是从输出中可以看到,默认情况下,文本字段的居中对齐和标签的左对齐。尝试使它们两个都对齐。

关于java - JLabel在GridBagLayout内部自动将其自身居中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53340443/

10-11 22:23
查看更多