我似乎无法弄清楚为什么我的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);
}
}
答案 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()
调用,因此所有代码都变得多余。但是,由于主要方法是静态的,因此无论如何都无法调用它。
我希望这有帮助!