我的应用程序顶部有一个栏,JLabel 两侧都有许多按钮。按钮的可见性取决于用户正在执行的当前任务,并且按钮的文本之一也可能根据当前状态而改变。
我想做的是让许多按钮粘在 JPanel 的左侧,JLabel 的中心位于 JPanel 的正中心,其余按钮位于 JPanel 的右侧。
到目前为止,我已经设法使用各种方法和布局管理器使按钮粘在左侧和右侧,但我无法使 JLabel 的中心位于 JPanel 的正中心。我设法得到的最好的结果是标签足够靠近中心,但随着按钮设置为可见或其文本更改,它会四处移动。
是否可以强制 JLabel 保持死点?
注意:按钮永远不会变得足够大以符合 JLabel 的任一边缘,因此这不是问题。
您还可以使用
BoxLayout
和 X_AXIS
布局,然后添加到容器中
编辑:这是一个例子
panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
panel.add(Box.createHorizontalGlue());
panel.add(innerPanel);
panel.add(Box.createHorizontalGlue());
在我看来,您需要以首选大小显示标签,然后需要左右面板来均匀填充窗口中的剩余可用空间。
您可以使用相对布局类。
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();
}
});
}
}
使用BorderLayout。添加具有 BorderLayout.CENTER 约束的 JLabel,并添加一对具有 BorderLayout.EAST 和 BorderLayout.WEST 约束的 JPanel。将您的附加按钮添加到适当的 JPanel。
要使文本居中显示,还需要将Label的horizontalAlignment设置为JLabel.CENTER。
setAlignmentX(java.awt.Component.CENTER_ALIGNMENT)
和
setAlignmentY(java.awt.Component.CENTER_ALIGNMENT)
如果与必须居中的元素一起使用可能会有所帮助,例如J面板
这些可能有帮助:
setAlignmentX(java.awt.Component.CENTER_ALIGNMENT)
setAlignmentY(java.awt.Component.CENTER_ALIGNMENT)