我需要在特定位置显示组件。我正试图显示JLabel
喜欢,
label1:
label2:
然而,下面的代码显示了它们,
label1 : label2:
JFrame myFrame = new JFrame("My Frame");
Container container = myFrame.getContentPane();
JPanel jPanel=new JPanel(new FlowLayout(FlowLayout.LEFT));
//jPanel.setLayout(null);
JLabel jLabel1=new JLabel("Label 1 : ");
JLabel jLabel2=new JLabel("Label 2 : ");
jLabel1.setLocation(10, 50);
jLabel2.setLocation(10, 80);
jPanel.add(jLabel1);
jPanel.add(jLabel2);
myFrame.setVisible(true);
myFrame.setResizable(false);
container.add(jPanel);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.pack();
如果调用jPanel.setLayout(null);
方法,则JFrame
上不会显示任何内容。
如何在JPanel
中的给定位置显示组件?
答案 0 :(得分:3)
null
布局通常是一个坏主意,所以最好避免它们。有几个布局管理器可用于垂直列。最明显的是垂直方向BoxLayout:
jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.Y_AXIS));
另一个是GridLayout,其中包含一列并自动确定行:
jPanel.setLayout(new GridLayout(0, 1));
setLocation()
调用是不必要的,因为确定组件边界是布局管理器的工作。 (这是null
布局案例的问题:如果你这样做,你需要处理所有手动处理的组件边界 - 强烈建议反对。)
编辑正如@camickr所指出的,尝试选择正确的布局管理器时,有用的资源是visual guide to layout managers.