小弟刚学JAVA,在练习Checkbox时碰到一个问题,始终不知道是怎么回事,请大家帮我看看。书上给出的程序如下:import java.awt.*;
import java.awt.event.*;class Checkbox
{
public static void main(String args[])
{
Frame f;
Checkbox cb1,cb2,cb3;
f=new Frame("Test Checkbox");
f.setLayout(new FlowLayout());
cb1=new Checkbox("one",null,true); //A
cb2=new Checkbox("two",null,true); //B
cb3=new Checkbox("three",null,true); //C
f.add(cb1); //D
f.add(cb2); //E
f.add(cb3); //F
f.setSize(200,400);
f.setVisible(true);
}
}class Handler implements ItemListener
{
public void itemStateChanged(ItemEvent ev)
{
String state="deselected";
if(ev.getStateChange()==ItemEvent.SELECTED)
{
state="selected";
}
System.out.println(ev.getItem()+" "+state);
}
}问题1:对上面的程序进行编译时,编译器始终说ABCDEF行找不到符号,请问这是怎么回事啊?
问题2:为什么Checkbox不像Button一样,要注册监听器?是书上写掉了吗?如果不是,那Checkbox如何俘获事件并处理呢?谢谢大家了!!
import java.awt.event.*;class Checkbox
{
public static void main(String args[])
{
Frame f;
Checkbox cb1,cb2,cb3;
f=new Frame("Test Checkbox");
f.setLayout(new FlowLayout());
cb1=new Checkbox("one",null,true); //A
cb2=new Checkbox("two",null,true); //B
cb3=new Checkbox("three",null,true); //C
f.add(cb1); //D
f.add(cb2); //E
f.add(cb3); //F
f.setSize(200,400);
f.setVisible(true);
}
}class Handler implements ItemListener
{
public void itemStateChanged(ItemEvent ev)
{
String state="deselected";
if(ev.getStateChange()==ItemEvent.SELECTED)
{
state="selected";
}
System.out.println(ev.getItem()+" "+state);
}
}问题1:对上面的程序进行编译时,编译器始终说ABCDEF行找不到符号,请问这是怎么回事啊?
问题2:为什么Checkbox不像Button一样,要注册监听器?是书上写掉了吗?如果不是,那Checkbox如何俘获事件并处理呢?谢谢大家了!!
这个地方有问题,你自己的类名字叫Checkbox覆盖了系统java.awt.Checkbox类。所以在你的程序里面使用的时候Checkbox都是指的你现在定义的这个类,
而他有没有Checkbox(java.lang.String,java.awt.CheckboxGroup,boolean)的构造方法,所以就找不到符号了。
Checkbox也要注册监听器,是你的书上漏掉了,事实上他后面的那个handler类就是一个监听类,但在程序里面没有实例化监听对象。
现在的那个程序他并没有时间处理功能,要有预想的时间处理功能须加上一下代码:
Handler h=new Handler();
cb1.addItemListener(h);
cb2.addItemListener(h);
cb3.addItemListener(h);
f.getContentPane.add(cb2); //E
f.getContentPane.add(cb3); //F