import java.awt.*;
import java.awt.event.*;
class MyPane1 extends Panel implements ItemListener
{ /**
*
*/
Checkbox box1, box2,box3;
CheckboxGroup sex;
TextArea text;
int index=0;
MyPane1(TextArea text)
{ this.text=text;
sex=new CheckboxGroup();
box1=new Checkbox("男",true,sex);
box2=new Checkbox("女",true,sex);
box1.addItemListener(this);
box2.addItemListener(this);
add(box1);
add(box2);
}
public void itemStateChanged(ItemEvent e)
{
Checkbox box=(Checkbox)e.getSource();
if(box.getState())
{ int n=text.getCaretPosition();
text.insert(box.getLabel(), n);
}
}
}
class MyPane2 extends Panel implements ItemListener
{ Checkbox box1, box2,box3;
TextArea text;
MyPane2(TextArea text)
{ this.text=text;
box1=new Checkbox("abcd");
box2=new Checkbox("李四");
box1.addItemListener(this);
box2.addItemListener(this);
add(box1);
add(box2);
}
public void itemStateChanged(ItemEvent e)
{ //System.out.print(box1);
//System.out.println(e.getItemSelectable());
Checkbox box=(Checkbox)e.getItemSelectable();
if(box.getState())
{// int n=text.getCaretPosition();
//System.out.println(n);
text.append("\n"+box.getLabel());
}
}
}
class WindowBox extends Frame
{ MyPane1 panel1;
MyPane2 panel2;
TextArea text;
WindowBox()
{ text=new TextArea();
//System.out.println(text);
panel1=new MyPane1(text);
panel2=new MyPane2(text);
add(panel1,BorderLayout.SOUTH);
add(panel2,BorderLayout.NORTH);
add(text,BorderLayout.CENTER);
setSize(400,200);
setVisible(true);
validate();
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
public class CheckBoxExa
{
/**
* @param args
*/
public static void main(String[] args) {
new WindowBox();
// TODO Auto-generated method stub
}
}
上面的程序实现复选框的项目事件,把发生事件的复选框的名称显示在文本框中。一直不是很明白:Checkbox box=(Checkbox)e.getItemSelectable();这句中e.getItemSelectable()选择框上发生的事件,通过e调用方法获得的也是一个选择框对象,把这个对象赋给另一个选则框对象时为什么还需要(Checkbox)强制转换?
------解决方案--------------------
子类实例赋给父类时不需要显示转型,父类赋给子类时需要显示转型。子类实例只有属性和行为完全和父类一致时才是子类型。