【问题标题】:JLabel ignoring setBounds MethodJLabel 忽略 setBounds 方法
【发布时间】:2020-07-21 11:56:34
【问题描述】:
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 执行相同的操作。因此标签 1 和 2 在定义的边界中合并,而标签 3 位于左中心。

我的问题:为什么?

在 IntelliJ IDEA 中完成。

【问题讨论】:

  • 1.不要手动设置边界。这就是layout mangers 的用途。 (旁注:您为所有 3 个标签设置的边界是相同的) 2. 您将标签添加到默认使用 BorderLayoutJFrame。这个add(label1);label1 添加到 BorederLayout CENTER 位置,它只能接受一个组件,而不是 3 个。

标签: java swing jlabel


【解决方案1】:

你有两个选择

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

 setContentPane(new JPanel(null));

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

 getContentPane().setLayout(null);

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

【讨论】:

    猜你喜欢
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2015-10-29
    • 2016-04-18
    相关资源
    最近更新 更多