如何构造JFrame子类?

时间:2015-08-07 19:13:11

标签: java swing graphics jframe

我试图从JFrame创建一个儿童班。我认为我正确地做了它但是当我运行它时它打开一个没有名称或背景颜色的空白窗口(我的JPanel类执行背景。但是,我知道错误不存在,因为我注释掉了add( Jpanel)并且窗口仍然没有名称)eclipse也没有显示任何语法错误。为什么这段代码不起作用?:

主要类别:

package ashwin.engine;
import javax.swing.*;
import java.awt.*; 
public class Execute {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){

            @Override
            public void run() {
                int[] bcolor = new int[3];
                bcolor[0] = 254;
                bcolor[1] = 0;
                bcolor[2] = 0;
                Window  wndw = new Window("Test", 1000, 1000, bcolor, true);

            } });

    }

}

JFrame子类:

package ashwin.engine;
import javax.swing.*;
import java.awt.*; 
public class Window extends JFrame {
    Window(String name, int width, int length, int[] backgroundColor, boolean visible) {

        System.out.println("made it to frame class");

        setName(name);
        setVisible(visible);
        setSize(width, length);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        Display display = new Display(backgroundColor);


    }
}

编辑: 忘了提,它确实打印出我的调试语句"使它成为框架类",不知道这是否有帮助,但我想我应该指出它。

2 个答案:

答案 0 :(得分:2)

将setVisible行设为最后一行。

答案 1 :(得分:2)

您不应该使用setNamesetTitle。这将有效地在屏幕上显示名称。 对于后台,您应该使用getContentPane().setBackgroundColor(Color color)

chode应该如下所示:

public class Execute {

    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                final Color bcolor = new Color(254, 0, 0);

                final Window wndw = new Window("Test", 1000, 1000, bcolor, true);

            }
        });

    }

}

public class Window extends JFrame {
    Window(final String name, final int width, final int length, final Color backgroundColor,
            final boolean visible) {

        System.out.println("made it to frame class");
        this.setTitle(name);
        this.setSize(width, length);
        this.getContentPane().setBackground(backgroundColor);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(visible);

    }
}