首页 > 解决方案 > JFrame 标签出现重叠

问题描述

我刚刚编写了JFrame一个包含一组JLabel组件的程序。该数组获取由 for 循环分配的单个标签的位置:

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]);   
}

不要混淆,我的框架名称是“对话框”。

有一个简单的问题:for 循环不像 for 循环那样工作,我不知道为什么,这是我框架中的结果:

伊姆古尔

不要关心单个标签条目,有趣的是Telefon.

如果我将循环的开头设置为以下,这是同样的问题,只是使用了另一个标签。

for(int i=0; i<label_entries.length-1; i++){...}

这是完整的代码

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]);   
}

这应该更容易理解。

标签: javaswingjframejlabel

解决方案


一个明显的问题是您正在设置组件的绝对位置。通常 aLayoutManager用于此目的。

要清除 aJFrame的内容窗格的默认布局管理器,请null在创建框架后将其设置为。

JFrame dialog = new JFrame();
dialog.setLayout(null);

推荐阅读