如何在JPanel中的定义位置显示组件?

时间:2013-09-14 14:31:41

标签: swing jframe jpanel jlabel

我需要在特定位置显示组件。我正试图显示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中的给定位置显示组件?

1 个答案:

答案 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.