[英]GUI objects not showing in Java on Mac
我才刚刚开始编写GUI程序,这是我的第二篇。 对于这两个项目(均为家庭作业),我都有相同的问题。 在我调整窗口大小或将键盘焦点移到它们之后,GUI对象(例如JTextField)才在应用程序运行时不显示。 如果我不做这两件事之一,那么我将有一个空的应用程序窗口。
有任何想法为什么会发生这种情况以及我可以采取什么措施来解决? 我正在Mac OS 10.6.1上工作。
我的代码如下。 请随意评论我的编码风格,但请专注于我遇到的问题。
import javax.swing.*;
import java.awt.*;
public class ToDo extends JFrame {
private int height = 30,
width = 300;
public ToDo() {
this.setSize(400,400);
this.setVisible(true);
this.setLayout(null);
this.setResizable(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("To Do List");
JTextField todoItem[] = new JTextField [10];
Container contentpane = this.getContentPane();
contentpane.setLayout(null);
for(int i=0; i<10; i++) {
todoItem[i] = new JTextField();
todoItem[i].setBounds(10,(height*(i)+10),width,height);
contentpane.add(todoItem[i]);
}
}
public static void main(String[] args) {
new ToDo();
}
}
您必须在使组件可见之前添加元素。
将其作为最后一行:
this.setVisible(true);
替代文字http://img10.imageshack.us/img10/8210/capturadepantalla200911s.png
这与OSX不相关,在Windows中也会发生。
有一些规则规定一旦实现就永远不要从Swing线程外部接触Swing对象。 我始终不理会这些规则,但是很可能是您在Mac OS下被它们咬了。
作为朝着正确正确方向迈出的一步,请尝试在组装完整个组件(即,在构造函数的底部)之前不要执行setVisible()。
参考资料: http : //www.math.vu.nl/~eliens/documents/java/tutorial/ui/swing/threads.html
一个猜测:在setBounds
之前添加组件。
我可能是错的-自从我在Java中完成了GUI以来已经很长时间了-但我猜测您的问题是在完成添加元素之前使JFrame可见。 我认为您需要在之后执行此操作,或者在框架上调用更新。
编辑-另外,不确定将布局设置为null是一个好主意。 我一直使用GridBag,但是如果将其设置为null,它可能会丢失其默认值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.