Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFrame标签显示为重叠_Java_Jframe_Jlabel - Fatal编程技术网

Java JFrame标签显示为重叠

Java JFrame标签显示为重叠,java,jframe,jlabel,Java,Jframe,Jlabel,我刚刚编写了一个程序,它有一个包含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]); } for(int i=0;i一个明显的问题是您正

我刚刚编写了一个程序,它有一个包含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]);   
}

for(int i=0;i一个明显的问题是您正在设置组件的绝对位置。通常使用
LayoutManager

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

JFrame dialog = new JFrame();
dialog.setLayout(null);
正如的javadoc所说:

默认内容窗格将设置一个
BorderLayout
管理器

Javadoc说:

边框布局布局容器,排列并调整其组件的大小,以适合五个区域:北、南、东、西和中心。每个区域只能包含一个组件,并由相应的常量标识:
西
中心
将组件添加到具有边框布局的容器中时,请使用以下五个常量之一,例如:

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);
由于您调用了1-arg版本的
add()
,所有JLabel都添加了
BorderLayout.CENTER
,因此最后一个赢了,
BorderLayout
管理器会自动将其定位在左中

要防止这种情况发生,只需删除布局管理器:

dialog.setLayout(null);

谢谢你的回答,我只是在另一个JFrame中使用了这个方法,我无法解释为什么这次没有使用它。。。
Panel p2 = new Panel();
p2.setLayout(new BorderLayout());
p2.add(new TextArea());  // Same as p.add(new TextArea(), BorderLayout.CENTER);
dialog.setLayout(null);