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)强制转换?

解决方案 »

  1.   

    楼主如果不使用强制类型转换(显式的类型转换),怎么编写下面的代码 ?是否会产生语法错误 ???楼主可以看看API,e.getItemSelectable()方法,返回的是什么对象类型 ?
    返回的对象,是否有后续要调用的方法 ? 如果没有,怎么调用这些方法来完成业务逻辑?
      

  2.   

    这是因为这两个对象所在的类不同,所以不能直接赋值,而需要强制转换,虽然两个对象的内容相同,可以这样理解吧?但是在继承里面,class A extends B;A a=new A(); B b=a;这个是上转型对象,不需要强制转换,但是当把上转型对象变为子类对象时,又要强制转换,这是继承里面的特例吗??
      

  3.   

    e.getItemSelectable()返回的是事件源对象,但是我不是很明白这儿返回的是ItemSelectable对象,它是Checkbox的父类对象??赋给子类时需强制转换