Java将JLabel与JPanel的中心对齐

Bas*_*tts 6 java swing jlabel jpanel layout-manager

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

我想要做的是在JPanel的左边有一些按钮,JLabel的中心位于JPanel的正中央,其余的按钮位于JPanel的右侧.

到目前为止,我已经设法使用各种方法和布局管理器使按钮左侧和右侧,但我无法让JLabel的中心位于JPanel的死点.我设法获得的最好的标签是靠近中心的标签,但随着按钮设置为可见或文本发生变化,它会移动.

是否有可能迫使JLabel保持死亡中心?

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

MeB*_*Guy 8

您还可以使用BoxLayoutX_AXIS布局的a,并添加到容器中

编辑:这是一个例子

panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(Box.createHorizontalGlue());
panel.add(innerPanel);
panel.add(Box.createHorizontalGlue());
Run Code Online (Sandbox Code Playgroud)


cam*_*ckr 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();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)