JLabel自动将其自身集中在GridBagLayout中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JLabel自动将其自身集中在GridBagLayout中相关的知识,希望对你有一定的参考价值。

我正在尝试制作一个定制的JTextField,它主持一个JLabel,所以我把JTextFieldJLabel包裹在一个扩展JPanel的自定义类中

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

enter image description here

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

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上的确切文本大小看起来很好,也会很好。

答案

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

但正如您在默认情况下可以从输出中看到的那样,文本字段具有居中对齐且标签左对齐。尝试使它们左对齐。

另一答案

感谢VGR在评论中,我通过将锚点设置为LINE_STARTS解决了这个问题

gbc.anchor = GridBagConstraints.LINE_STARTS;

编辑:使用BoxLayout结束,感谢camickr回答一个例子。

以上是关于JLabel自动将其自身集中在GridBagLayout中的主要内容,如果未能解决你的问题,请参考以下文章

jLabel 不显示

卷曲括号自动将其自身置于文本字符串周围?

如何禁用 JLabel 的自动 HTML 支持?

JLabel 文本在窄列中而不是展开

将JLabel图标转换为Java中的字节

在 JLabel 中显示来自 URL 的动画 .gif