繁体   English   中英

Mac上的Java中未显示GUI对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM