我正在使用NetBeans GUI构建器来处理我的布局(我对LayoutManagers很糟糕),并试图放置一个简单的JLabel,以使其始终(水平)居于其父JPanel内部。理想情况下,即使调整了JPanel的大小,这也将保持正确,但是,如果这是一个疯狂的编码,比第一次创建JPanel时居中就足够了。
我自己尝试处理布局已经很糟糕了,但是由于NetBeans GUI Builder自动生成不可变的代码,因此我无法弄清楚如何进行居中,而且我也无法在线找到任何东西来帮助我。
感谢任何能够指引我正确方向的人!
以下是使组件居中的四种方法:
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); } }); } }