我刚刚编写了一个程序,该程序具有一个包含JLabel数组的JFrame。数组获取由for循环分配的单个JLabel的位置:
for(int i=0; i<label_entries.length; i++){
label_entries[i].setLocation(10, i*30);
label_entries[i].setSize(120,30);
dialog.add(label_entries[i]);
}
不要困惑,我的JFrame的名称是“ dialog”。 有一个简单的问题:for循环不应该像for循环那样工作,我也不知道为什么,这是我的JFrame中的结果: Imgur。
不要关心单个JLabel条目,有趣的是“ Telefon”的位置。 如果我将循环的开始设置为
for(int i=0; i<label_entries.length-1; i++){...}
这是同样的问题,只是另一个JLabel。
希望您能帮助我, 来自德国的问候
编辑:这是完整的代码:
JFrame dialog = new JFrame();
dialog.setBounds(25, 50, 500, 500);
dialog.setTitle("Eintrag hinzufügen");
dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
JLabel[] label_entries = new JLabel[11];
JTextField[] textfields = new JTextField[11];
label_entries[0] = new JLabel("Vorname :");
label_entries[1] = new JLabel("Nachname :");
label_entries[2] = new JLabel("Nummer :");
label_entries[3] = new JLabel("Geburtstag :");
label_entries[4] = new JLabel("Land :");
label_entries[5] = new JLabel("PLZ :");
label_entries[6] = new JLabel("Stadt :");
label_entries[7] = new JLabel("Strasse :");
label_entries[8] = new JLabel("Hausnummer :");
label_entries[9] = new JLabel("E-Mail :");
label_entries[10] = new JLabel("Telefon :");
for(int i=0; i<label_entries.length; i++){
label_entries[i].setLocation(10, i*30);
label_entries[i].setSize(120,30);
dialog.add(label_entries[i]);
}
这应该更容易理解...
答案 0 :(得分:1)
一个明显的问题是您正在设置组件的绝对位置。通常,LayoutManager
用于此目的。
要清除JFrame
内容窗格的默认布局管理器,请在创建框架后立即将其设置为null
。
JFrame dialog = new JFrame();
dialog.setLayout(null);
答案 1 :(得分:1)
JFrame
的Javadoc说:
默认的内容窗格上将设置一个
BorderLayout
管理器。
BorderLayout
的Javadoc说:
边界布局可对容器进行布局,并对其组件进行调整并调整其大小以适合五个区域:北,南,东,西和中部。每个区域最多可以包含一个组成部分,并由相应的常量
NORTH
,SOUTH
,EAST
,WEST
和CENTER
标识。将组件添加到具有边框布局的容器时,请使用以下五个常量之一,例如:Panel p = new Panel(); p.setLayout(new BorderLayout()); p.add(new Button("Okay"), BorderLayout.SOUTH);
为方便起见,
BorderLayout
将字符串规范的缺失解释为与常量CENTER
相同:Panel p2 = new Panel(); p2.setLayout(new BorderLayout()); p2.add(new TextArea()); // Same as p.add(new TextArea(), BorderLayout.CENTER);
自从您调用add()
的1-arg版本以来,所有JLabel都添加了BorderLayout.CENTER
,所以最后一个获胜,BorderLayout
管理器随后将其自动定位在左中角。
要防止这种情况发生,只需删除布局管理器即可:
dialog.setLayout(null);