Why is my JFrame empty?

安稳与你 提交于 2019-12-02 17:07:30

问题


I can't seem to figure out why my JFrame is empty. Where am I going wrong?

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();

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);

}

}


回答1:


You forgot to add the contentPane in your jFrame, something like this

frame.setContentPane(panel);

I notice you're using inheritance to build your jFrame, so in this case you need to instantiate your own class. I've refactored your code with the minimun to run an 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);
    }
}

Basically you create an JFrame, create an JPanel, add your components to this panel and set the panel to your frame with setContentPane(panel).

I'm sorry I can't test this right now, so if someone could and fix if needed, would really appreciate, but is something like this.




回答2:


First of all this is quite a good try to what you are trying to do. However there seem to be some basic misunderstandings as to how you are coding the GUI.

There are two ways of making a GUI in java. Either you create frames and panel objects then add your components to them, or you can create and extend your own classes by extends JFrame. But in this case you have tried to do both. You have extended JFrame and you have created the Objects.

I actually quite like how you've tried to extended the JFrame, so I've continued this and made code that add stuff to your screen!

See below - 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();
    }
}

To get this working. Compile both of the files and then run your program through test.java.

Moreover your original solution, nowhere did you add a newGUI() call so all that code becomes redundant. However as the main method is static, you wouldn't be able to call it anyways.

I hope this helps!



来源:https://stackoverflow.com/questions/46328324/why-is-my-jframe-empty

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!