Java Swing小程序,包括3个复选框和一个TextField。单击时指定的复选框显示分配给给定TextField中相应复选框的标题。问题是即使编译和运行时没有错误,空白帧也会显示为输出.. !!
这是Java代码:
SwingAll类:
package swingall;
import java.awt.Container;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class SwingAll extends JFrame implements ItemListener {
JTextField t1;
JCheckBox c1,c2,c3;
public void init()
{
Container cp=getContentPane();
t1=new JTextField(20);
c1=new JCheckBox("Arts");
c2=new JCheckBox("Commerce");
c3=new JCheckBox("Science");
add(c1);
add(c2);
add(c3);
add(t1);
c1.addItemListener(this);
c2.addItemListener(this);
c3.addItemListener(this);
}
public void itemStateChanged(ItemEvent e) {
if (e.getSource()==c1)
{
t1.setText("Arts");
}
if (e.getSource()==c2)
{
t1.setText("Commerce");
}
if (e.getSource()==c3)
{
t1.setText("Science");
}
}
}
主要类别是:
package swingall;
public class Main {
public static void main(String[] args) {
SwingAll sg=new swingAll();
sg.setSize(500, 500);
sg.setVisible(true);
}
}
答案 0 :(得分:2)
您从未调用过init()
方法。
因此,你永远不会在框架中放置任何东西。
答案 1 :(得分:1)
你不要调用你的init方法。 添加构造函数
public SwingAll () {
init();
}
答案 2 :(得分:1)
你需要将你的类init()设置为构造函数,它应该是SwingAll
尝试添加private static final long serialVersionUID = 1L;
我没有看到窗口的标题尝试设置
super("window name");
和
setDefaultCloseOperation(EXIT_ON_CLOSE);
答案 3 :(得分:1)
正如其他答案所述,init()
未被调用。 OTOH,如果是,只显示一个组件。这个变种解决了这两个问题。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SwingAll extends JFrame implements ItemListener {
JTextField t1;
JCheckBox c1,c2,c3;
public void init()
{
// end the JVM when frame is closed.
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Container cp=getContentPane();
// set a layout that takes many components without a
// constraint and displays them.
cp.setLayout(new FlowLayout());
t1=new JTextField(20);
c1=new JCheckBox("Arts");
c2=new JCheckBox("Commerce");
c3=new JCheckBox("Science");
add(c1);
add(c2);
add(c3);
add(t1);
c1.addItemListener(this);
c2.addItemListener(this);
c3.addItemListener(this);
// pack the GUI to the size needed to display the content
pack();
}
public void itemStateChanged(ItemEvent e) {
if (e.getSource()==c1)
{
t1.setText("Arts");
}
if (e.getSource()==c3)
{
t1.setText("Commerce");
}
if (e.getSource()==c3)
{
t1.setText("Science");
}
}
public static void main(String[] args) {
// should be started on the EDT.
SwingAll sg= new SwingAll();
sg.init();
sg.setVisible(true);
}
}
// should be started on the EDT.
应该在事件发送线程上启动和更新Swing GUI,作为用户的练习。BorderLayout
。此布局有5个可以由约束指定的可能区域,每个区域可以只包含一个组件。通过在没有约束的情况下将组件添加到边框布局,它们都默认为BorderLayout.CENTER
。pack()
即可。JRadioButton
和ButtonGroup
。