Java 将 JLabel 对齐在 JPanel 的中心

问题描述 投票:0回答:5

我的应用程序顶部有一个栏,JLabel 两侧都有许多按钮。按钮的可见性取决于用户正在执行的当前任务,并且按钮的文本之一也可能根据当前状态而改变。

我想做的是让许多按钮粘在 JPanel 的左侧,JLabel 的中心位于 JPanel 的正中心,其余按钮位于 JPanel 的右侧。

到目前为止,我已经设法使用各种方法和布局管理器使按钮粘在左侧和右侧,但我无法使 JLabel 的中心位于 JPanel 的正中心。我设法得到的最好的结果是标签足够靠近中心,但随着按钮设置为可见或其文本更改,它会四处移动。

是否可以强制 JLabel 保持死点?

注意:按钮永远不会变得足够大以符合 JLabel 的任一边缘,因此这不是问题。

java swing jpanel jlabel layout-manager
5个回答
9
投票

您还可以使用

BoxLayout
X_AXIS
布局,然后添加到容器中

编辑:这是一个例子

panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(Box.createHorizontalGlue());
panel.add(innerPanel);
panel.add(Box.createHorizontalGlue());

4
投票

在我看来,您需要以首选大小显示标签,然后需要左右面板来均匀填充窗口中的剩余可用空间。

您可以使用相对布局类。

import java.awt.*;
import javax.swing.*;

public class RelativeSSCCE extends JPanel
{
    public RelativeSSCCE()
    {
        JPanel left = new JPanel( new FlowLayout(FlowLayout.LEFT) );
        left.add( new JButton("L1") );
        left.add( new JButton("L2") );
        left.add( new JButton("L3") );

        JLabel center = new JLabel("Centered");

        JPanel right = new JPanel( new FlowLayout(FlowLayout.RIGHT) );
        right.add( new JButton("Right1") );
        right.add( new JButton("Right2") );
        right.add( new JButton("Right3") );

        // choose your layout manager here

        setLayout( new RelativeLayout() );
        Float ratio = new Float(1);
        add(left, ratio);
        add(center);
        add(right, ratio);
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("Basic RelativeSSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new RelativeSSCCE() );
        frame.setSize(600, 100);
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}

3
投票

使用BorderLayout。添加具有 BorderLayout.CENTER 约束的 JLabel,并添加一对具有 BorderLayout.EAST 和 BorderLayout.WEST 约束的 JPanel。将您的附加按钮添加到适当的 JPanel。

要使文本居中显示,还需要将Label的horizontalAlignment设置为JLabel.CENTER。


3
投票
setAlignmentX(java.awt.Component.CENTER_ALIGNMENT)

setAlignmentY(java.awt.Component.CENTER_ALIGNMENT) 

如果与必须居中的元素一起使用可能会有所帮助,例如J面板


0
投票

这些可能有帮助:

setAlignmentX(java.awt.Component.CENTER_ALIGNMENT)
setAlignmentY(java.awt.Component.CENTER_ALIGNMENT)
© www.soinside.com 2019 - 2024. All rights reserved.