【问题标题】:Erase Label Constraints擦除标签约束
【发布时间】:2018-12-13 02:05:23
【问题描述】:

我命名了一个自定义标签 MyLabel,它的工作方式有些奇怪。 MyLabel 是一个Label,只是对JLabel 的扩展。

public class MyLabel extends JLabel {
    public MyLabel() {
        // TODO Auto-generated constructor stub
    }

    public MyLabel(String arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }

    public MyLabel(Icon arg0) {
        super(arg0);
        // TODO Auto-generated constructor stub
    }

    public MyLabel(String arg0, int arg1) {
        super(arg0, arg1);
        // TODO Auto-generated constructor stub
    }

    public MyLabel(Icon arg0, int arg1) {
        super(arg0, arg1);
        // TODO Auto-generated constructor stub
}

    public MyLabel(String arg0, Icon arg1, int arg2) {
        super(arg0, arg1, arg2);
        // TODO Auto-generated constructor stub
    }
}

如您所见,没有添加任何内容。但是,这很奇怪。每当我添加 MyLabel 类标签时,我添加的最后一个会获得约束,尽管我没有添加!

下面是我在 Contentpane 上添加标签的方式。

MyLabel label0_1 = new MyLabel("");
MyLabel label0_2 = new MyLabel("");
MyLabel label0_3 = new MyLabel("");
MyLabel label0_4 = new MyLabel("");
MyLabel label0_0 = new MyLabel("");
MyLabel label1_1 = new MyLabel("");
MyLabel label1_2 = new MyLabel("");
MyLabel label1_3 = new MyLabel("");
MyLabel label1_4 = new MyLabel("");
MyLabel label1_0 = new MyLabel("");
MyLabel label2_1 = new MyLabel("");
MyLabel label2_2 = new MyLabel("");
MyLabel label2_3 = new MyLabel("");
MyLabel label2_4 = new MyLabel("");
MyLabel label2_0 = new MyLabel("");
MyLabel label3_1 = new MyLabel("");
MyLabel label3_2 = new MyLabel("");
MyLabel label3_3 = new MyLabel("");
MyLabel label3_4 = new MyLabel("");
MyLabel label3_0 = new MyLabel("");
MyLabel label4_1 = new MyLabel("");
MyLabel label4_2 = new MyLabel("");
MyLabel label4_3 = new MyLabel("");
MyLabel label4_4 = new MyLabel("");
MyLabel label4_0 = new MyLabel("");
label0_1 = new MyLabel(defaultImage);
label0_2 = new MyLabel(defaultImage);
label0_3 = new MyLabel(defaultImage);
label0_4 = new MyLabel(defaultImage);
label0_0 = new MyLabel(defaultImage);
label1_1 = new MyLabel(defaultImage);
label1_2 = new MyLabel(defaultImage);
label1_3 = new MyLabel(defaultImage);
label1_4 = new MyLabel(defaultImage);
label1_0 = new MyLabel(defaultImage);
label2_1 = new MyLabel(defaultImage);
label2_2 = new MyLabel(defaultImage);
label2_3 = new MyLabel(defaultImage);
label2_4 = new MyLabel(defaultImage);
label2_0 = new MyLabel(defaultImage);
label3_1 = new MyLabel(defaultImage);
label3_2 = new MyLabel(defaultImage);
label3_3 = new MyLabel(defaultImage);
label3_4 = new MyLabel(defaultImage);
label3_0 = new MyLabel(defaultImage);
label4_1 = new MyLabel(defaultImage);
label4_2 = new MyLabel(defaultImage);
label4_3 = new MyLabel(defaultImage);
label4_0 = new MyLabel(defaultImage);
label4_4 = new MyLabel(defaultImage);
label0_0.setBounds(120, 120, 100, 100);
label0_1.setBounds(220, 120, 100, 100);
label0_2.setBounds(320, 120, 100, 100);
label0_3.setBounds(420, 120, 100, 100);
label0_4.setBounds(520, 120, 100, 100);
label1_0.setBounds(120, 220, 100, 100);
label1_1.setBounds(220, 220, 100, 100);
label1_2.setBounds(320, 220, 100, 100);
label1_3.setBounds(420, 220, 100, 100);
label1_4.setBounds(520, 220, 100, 100);
label2_0.setBounds(120, 320, 100, 100);
label2_1.setBounds(220, 320, 100, 100);
label2_2.setBounds(320, 320, 100, 100);
label2_3.setBounds(420, 320, 100, 100);
label2_4.setBounds(520, 320, 100, 100);
label3_0.setBounds(120, 420, 100, 100);
label3_1.setBounds(220, 420, 100, 100);
label3_2.setBounds(320, 420, 100, 100);
label3_3.setBounds(420, 420, 100, 100);
label3_4.setBounds(520, 420, 100, 100);
label4_0.setBounds(120, 520, 100, 100);
label4_1.setBounds(220, 520, 100, 100);
label4_2.setBounds(320, 520, 100, 100);
label4_3.setBounds(420, 520, 100, 100);
label4_4.setBounds(520, 520, 100, 100);
frame.getContentPane().add(label0_0);
frame.getContentPane().add(label0_1);
frame.getContentPane().add(label0_2);
frame.getContentPane().add(label0_3);
frame.getContentPane().add(label0_4);
frame.getContentPane().add(label1_0);
frame.getContentPane().add(label1_1);
frame.getContentPane().add(label1_2);
frame.getContentPane().add(label1_3);
frame.getContentPane().add(label1_4);
frame.getContentPane().add(label2_0);
frame.getContentPane().add(label2_1);
frame.getContentPane().add(label2_2);
frame.getContentPane().add(label2_3);
frame.getContentPane().add(label2_4);
frame.getContentPane().add(label3_0);
frame.getContentPane().add(label3_1);
frame.getContentPane().add(label3_2);
frame.getContentPane().add(label3_3);
frame.getContentPane().add(label3_4);
frame.getContentPane().add(label4_0);
frame.getContentPane().add(label4_1);
frame.getContentPane().add(label4_2);
frame.getContentPane().add(label4_3);
frame.getContentPane().add(label4_4);

我为此添加了一些标签。现在,label4_4 有约束。当我删除 label4_4 时,label4_3 得到了约束。当我也删除了 label4_3 时, label4_2 得到了它!为什么会这样?

【问题讨论】:

    标签: java swing constraints jlabel


    【解决方案1】:

    首先,您需要特别阅读Laying Out Components Within a ContainerHow to Use BorderLayout

    JFrame,默认使用BorderLayout。这意味着只有最后添加到五个可用位置(CENTER 是默认值)中的任何一个的组件将被管理,所有其他组件都将被忽略。

    你的问题的答案很简单。

    1. 不要使用setBounds
    2. 使用一个或多个适当的布局管理器

    【讨论】:

    • 感谢我找到了错误的地方。我需要从一开始就使用 AbsoluteLayout,但我忘记了。
    • ?不,您需要使用适当的布局管理器,您所做的只是为自己做更多的工作
    • 我这样做是为了制作一个 5*5 大小的板,所以这对我来说是必要的。无论如何,谢谢您的回复。
    • GridLayout 或 GridBagLayout
    猜你喜欢
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2017-08-24
    • 2017-12-03
    • 1970-01-01
    • 2018-10-21
    • 2019-02-04
    • 1970-01-01
    相关资源
    最近更新 更多