为什么我的JFrame是空的?

时间:2017-09-20 17:28:03

标签: java swing jframe

我似乎无法弄清楚为什么我的JFrame是空的。我哪里错了?

import javax.swing。*; import java.awt.FlowLayout;

公共类GUIExample扩展了JFrame {

JCheckBox box1 = new JCheckBox("Satellite Radio");
JCheckBox box2 = new JCheckBox("Air Conditioning");
JCheckBox box3 = new JCheckBox("Manual Tranmission");
JCheckBox box4 = new JCheckBox("Leather Seats");
JRadioButton radio1 = new JRadioButton("Car");
JRadioButton radio2 = new JRadioButton("Pickup Truck");
JRadioButton radio3 = new JRadioButton("Minivan");
JTextField text = new JTextField();
ButtonGroup group = new ButtonGroup();

public void newGUI() {

    setLayout(new FlowLayout());
    JPanel panel = new JPanel();
    JPanel textPanel = new JPanel();

    add(textPanel);
    add(panel);

    panel.add(box1);
    panel.add(box2);
    panel.add(box3);
    panel.add(radio1);
    panel.add(radio2);
    panel.add(radio3);
    group.add(radio1);
    group.add(radio2);
    group.add(radio3);

}

public static void main(String[] args) {

    JFrame frame = new JFrame("GUI Example");
    frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
    frame.setSize(500, 500);
    frame.setVisible(true);

}

}

2 个答案:

答案 0 :(得分:0)

您忘了在jFrame中添加contentPane,就像这样

frame.setContentPane(panel);

我注意到你正在使用继承来构建你的jFrame,所以在这种情况下你需要实例化你自己的类。我使用minimun重构了您的代码以运行jFrame。

public class GUIExample extends JFrame {

    JCheckBox box1 = new JCheckBox("Satellite Radio");

    public static void main(String[] args) {
        JFrame frame = new GUIExample("GUI Example");
        JPanel panel = new JPanel();
        panel.setLayout(new FlowLayout());
        panel.add(box1);

        frame.setContentPane(panel);
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setVisible(true);
    }
}

基本上,您创建了一个JFrame,创建了一个JPanel,将您的组件添加到此面板,并使用setContentPane(panel)将面板设置为您的框架。

对不起,我现在无法对此进行测试,所以如果有人可以根据需要进行修复,我会非常感激,但就是这样。

答案 1 :(得分:0)

首先,这是对你要做的事情的一次很好的尝试。但是,对于如何编写GUI,似乎存在一些基本的误解。

在java中有两种制作GUI的方法。您可以创建框架和面板对象,然后将组件添加到它们,也可以按extends JFrame创建和扩展自己的类。但在这种情况下,你试图做到这两点。您已经扩展了JFrame并且已经创建了对象。

我实际上非常喜欢你试图扩展JFrame的方式,所以我继续这样做并制作了一些代码,可以在屏幕上添加内容!

见下文 - GUIExample.java:

import javax.swing.*; 
import java.awt.FlowLayout;

public class GUIExample extends JFrame {

    JCheckBox box1 = new JCheckBox("Satellite Radio");
    JCheckBox box2 = new JCheckBox("Air Conditioning");
    JCheckBox box3 = new JCheckBox("Manual Tranmission");
    JCheckBox box4 = new JCheckBox("Leather Seats");
    JRadioButton radio1 = new JRadioButton("Car");
    JRadioButton radio2 = new JRadioButton("Pickup Truck");
    JRadioButton radio3 = new JRadioButton("Minivan");
    JTextField text = new JTextField();
    ButtonGroup group = new ButtonGroup();

    GUIExample() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(500, 500);
        setVisible(true);

        newGUI();
    }


    public void newGUI() {

        setLayout(new FlowLayout());
        JPanel panel = new JPanel();
        JPanel textPanel = new JPanel();

        add(textPanel);
        add(panel);

        panel.add(box1);
        panel.add(box2);
        panel.add(box3);
        panel.add(radio1);
        panel.add(radio2);
        panel.add(radio3);
        group.add(radio1);
        group.add(radio2);
        group.add(radio3);

    }

}

test.java:

public class test {

    public static void main(String[] args) {
        GUIExample e = new GUIExample();
    }
}

让这个工作。编译两个文件,然后通过test.java运行程序。

此外,您的原始解决方案无法添加newGUI()调用,因此所有代码都变得多余。但是,由于主要方法是静态的,因此无论如何都无法调用它。

我希望这有帮助!