擦除标签约束
Erase Label Constraints
我将一个自定义标签命名为 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 class 标签时,我添加的最后一个会得到约束,尽管我没有添加!
下面是我在 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 明白了!为什么会这样?
首先,你需要特别去阅读Laying Out Components Within a Container and How to Use BorderLayout。
A JFrame
,默认使用BorderLayout
。这意味着只有添加到五个可用位置(CENTER
是默认位置)中的任何一个的最后一个组件将被管理,所有其他组件将被忽略。
你的问题的答案很简单。
- 不要使用
setBounds
- 使用一个或多个合适的布局管理器
我将一个自定义标签命名为 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 class 标签时,我添加的最后一个会得到约束,尽管我没有添加!
下面是我在 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 明白了!为什么会这样?
首先,你需要特别去阅读Laying Out Components Within a Container and How to Use BorderLayout。
A JFrame
,默认使用BorderLayout
。这意味着只有添加到五个可用位置(CENTER
是默认位置)中的任何一个的最后一个组件将被管理,所有其他组件将被忽略。
你的问题的答案很简单。
- 不要使用
setBounds
- 使用一个或多个合适的布局管理器