0

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

4

1 回答 1

3

null布局通常是一个坏主意,因此最好避免使用它们。有几个布局管理器可用于垂直列。最明显的是垂直方向的BoxLayout :

jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.Y_AXIS));

另一种是GridLayout,它有一列和自动确定的行:

jPanel.setLayout(new GridLayout(0, 1));

这些setLocation()调用是不必要的,因为确定组件边界是布局管理器的工作。(这是null布局案例的问题:如果这样做,则需要手动处理所有组件边界 -强烈建议不要这样做)。

编辑:正如@camickr 所指出的,在尝试选择正确的布局管理器时,一个有用的资源是布局管理器的视觉指南。

于 2013-09-14T14:39:52.040 回答