JLabel忽略setBounds方法

时间:2020-07-21 11:56:34

标签: java swing jlabel

public class Window extends JFrame {

public Window() {
    super("Whatever Window idk");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(300, 300);
    setLocationRelativeTo(null);
    setVisible(true);

    JLabel label1 = new JLabel();
    label1.setText("label1");
    label1.setBounds(40, 20, 100, 30);

    JLabel label2 = new JLabel();
    label2.setText("label2");
    label2.setBounds(40, 20, 100, 30);

    JLabel label3 = new JLabel();
    label3.setText("label3");
    label3.setBounds(40, 20, 100, 30);

    add(label1);
    add(label2);
    add(label3);
}

public static void main(final String[] args) {
    new Window();
}

我用给定的边界构造了label1。这些界限应将我的标签放在窗口中心的左上角。

情况并非如此,因为标签被放置在窗口的左中心。

然后,在更改边界后不起作用,我创建了具有相同边界的label2,以检查行是否会“合并”或其他内容。事实证明,添加标签2会将标签1推入正确的位置(如setBounds()中所定义),并将标签2代替其放置在最左侧的中心位置。 现在,添加具有完全相同边界的标签3与标签2具有相同的作用。因此,在将标签3置于左中位置时,标签1和2将在定义的边界内合并。

我的问题:为什么?

在IntelliJ IDEA中完成。

1 个答案:

答案 0 :(得分:0)

您有2个选择

1)将帧内容窗格设置为具有空布局的面板

 setContentPane(new JPanel(null));

2)将现有的内容窗格布局设置为null

 getContentPane().setLayout(null);

在您调用了super()方法后添加这两行中的任意一行