7

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

我想做的是在 JPanel 的左侧粘贴一些按钮,JLabel 的中心位于 JPanel 的正中心,其余按钮位于 JPanel 的右侧。

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

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

注意:按钮永远不会变大到足以满足 JLabel 的任一边缘,所以这不是问题。

4

5 回答 5

9

您还可以使用BoxLayout带有X_AXIS布局的 , 并添加到容器中

编辑:这是一个例子

panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(Box.createHorizontalGlue());
panel.add(innerPanel);
panel.add(Box.createHorizontalGlue());
于 2011-03-17T22:24:04.293 回答
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();
            }
        });
    }
}
于 2011-03-18T00:12:02.193 回答
3

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

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

于 2011-03-17T22:14:23.340 回答
2
setAlignmentX(java.awt.Component.CENTER_ALIGNMENT)

setAlignmentY(java.awt.Component.CENTER_ALIGNMENT) 

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

于 2013-04-03T16:09:07.493 回答
0

可能是我在发布 necroposting,但 setAlignmentX(java.awt.Component.CENTER_ALIGNMENT) 和 setAlignmentY(java.awt.Component.CENTER_ALIGNMENT) 可能会有所帮助...

于 2013-04-03T16:01:24.590 回答