我正在使用NetBeans GUI构建器来处理我的布局(我对LayoutManagers很糟糕)并且我正在尝试放置一个简单的JLabel,以便它始终在其父JPanel中居中(水平)。理想情况下,即使JPanel被调整大小,这也会保持正确,但是如果这是一个疯狂的编码量,那么在首次创建JPanel时就足以使其居中。
我自己很难尝试处理布局,但由于NetBeans GUI Builder自动生成不可变代码,因此我无法弄清楚如何进行这种集中化,而且我无法在线找到任何内容。帮助我。
感谢任何能引导我朝正确方向前进的人!
答案 0 :(得分:27)
以下是将组件置于中心的四种方法:
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);
}
});
}
}
答案 1 :(得分:12)
使用Borderlayout,您可以将JComponents中的任何一个放入CENTER区域。有关示例,请参阅an answer to Stack Overflow question Get rid of the gap between JPanels。这应该有用。
答案 2 :(得分:10)
即使使用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,因为它非常灵活。
答案 3 :(得分:6)
Mara:“感谢您的回复,但是NetBeans GUI Build使用了GroupLayout,而且这是不可覆盖的。”
不正确!右键单击NetBeans GUI构建器中JFrame(或任何其他GUI容器)内的任意位置,然后选择“设置布局”。默认情况下选择“自由设计”,即组布局,但您可以选择任何其他布局,包括mKorbel建议的边框布局。
答案 4 :(得分:5)
有很多方法可以执行此操作,具体取决于您使用的布局管理器。我建议你阅读Laying Out Components Within a Container教程。
我相信无论布局管理器如何,以下内容都可以使用: