在Janel上集中一个JLabel

我正在使用NetBeans GUI生成器来处理我的布局(我对布局管理器非常糟糕),并试图放置一个简单的JLabel,以便它始终在其父级JPanel中居中(水平)。 理想情况下,即使JPanel被调整大小,这也会保持真实,但是如果这是一个疯狂的编码,而不是仅仅在JPanel被创建时居中就足够了。

我自己试图处理布局已经够坏了,但是由于NetBeans GUI Builder自动生成不可变的代码,因此我无法弄清楚如何执行这种对中操作,而且我也无法在网上找到任何帮助我的东西。

感谢任何能引导我走向正确的人!

通过使用Borderlayout ,您可以将任何JComponents放到CENTER区域。 举一个例子,看一个堆栈溢出问题的答案摆脱JPanel之间的差距 。 这应该工作。

这里有四种方法来中心组件:

四个中心组件

 import java.awt.*; import javax.swing.*; import javax.swing.border.*; class CenterComponent { public static JLabel getLabel(String text) { return getLabel(text, SwingConstants.LEFT); } public static JLabel getLabel(String text, int alignment) { JLabel l = new JLabel(text, alignment); l.setBorder(new LineBorder(Color.RED, 2)); return l; } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JPanel p = new JPanel(new GridLayout(2,2,4,4)); p.setBackground(Color.black); p.setBorder(new EmptyBorder(4,4,4,4)); JPanel border = new JPanel(new BorderLayout()); border.add(getLabel( "Border", SwingConstants.CENTER), BorderLayout.CENTER); p.add(border); JPanel gridbag = new JPanel(new GridBagLayout()); gridbag.add(getLabel("GridBag")); p.add(gridbag); JPanel grid = new JPanel(new GridLayout()); grid.add(getLabel("Grid", SwingConstants.CENTER)); p.add(grid); // from @0verbose JPanel box = new JPanel(); box.setLayout(new BoxLayout(box, BoxLayout.X_AXIS )); box.add(Box.createHorizontalGlue()); box.add(getLabel("Box")); box.add(Box.createHorizontalGlue()); p.add(box); JFrame f = new JFrame("Streeeetch me.."); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setContentPane(p); f.pack(); f.setLocationByPlatform(true); f.setVisible(true); } }); } } 

即使使用BoxLayout,您也可以实现这一点:

 JPanel listPane = new JPanel(); listPane.setLayout(new BoxLayout(listPane, BoxLayout.X_AXIS )); JLabel label = new JLabel(); listPane.add(Box.createHorizontalGlue()); listPane.add(label); listPane.add(Box.createHorizontalGlue()); 

mKorbel的解决方案非常适合您的目标。 无论如何,我总是喜欢推荐BoxLayout,因为它非常灵活。

Mara:“感谢您的回应,但是NetBeans GUI Build使用GroupLayout,这是不可覆盖的。”

不对! 右键单击NetBeans GUI构建器中的JFrame(或任何其他GUI容器)内的任意位置,然后选择“设置布局”。 默认情况下选择“Free Design”,这是组织布局,但是您可以选择任何其他布局,包括mKo​​rbel建议的边框布局。

有很多方法可以做到,具体取决于您使用的布局管理器。 我建议你阅读容器教程中的Laying Out组件 。

我相信下面的工作,不管布局经理:

JLabel.setHorizontalAlignment(SwingConstants.CENTER)