源程序在帖子最下面,请着重看下面这一段,这个事内部类吗?有名的?不太懂这一段。。
谢谢
ItemListener il = new ItemListener() {
public void itemStateChanged(ItemEvent e) {
JCheckBox cb = (JCheckBox) e.getSource(); //取得事件源
if (cb == cb1) {
ta.append("\n JCheckBox Button 1 "+ cb1.isSelected());
} else if (cb == cb2) {
ta.append("\n JCheckBox Button 2 "+ cb2.isSelected());
 } else if (cb == cb3) {
ta.append("\n JCheckBox Button 3 "+ cb3.isSelected());
} else if (cb == cb4) {
ta.append("\n JCheckBox Button 4 "+ cb4.isSelected());
} else if (cb == cb5) {
ta.append("\n JCheckBox Button 5 "+ cb5.isSelected());
} else {
ta.append("\n JCheckBox Button 6 "+ cb6.isSelected());
}
}
};
程序8-3:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;public class TwoStatesButtonDemo2 {
JFrame frame = new JFrame ("Two States Button Demo 2"); JCheckBox cb1 = new JCheckBox("JCheckBox 1");
JCheckBox cb2 = new JCheckBox("JCheckBox 2");
JCheckBox cb3 = new JCheckBox("JCheckBox 3"); JCheckBox cb4 = new JCheckBox("JCheckBox 4");
JCheckBox cb5 = new JCheckBox("JCheckBox 5");
JCheckBox cb6 = new JCheckBox("JCheckBox 6"); JRadioButton rb1 = new JRadioButton("JRadioButton 1");
JRadioButton rb2 = new JRadioButton("JRadioButton 2");
JRadioButton rb3 = new JRadioButton("JRadioButton 3");

JRadioButton rb4 = new JRadioButton("JRadioButton 4");
JRadioButton rb5 = new JRadioButton("JRadioButton 5");
JRadioButton rb6 = new JRadioButton("JRadioButton 6");

JTextArea ta = new JTextArea(); //用于显示结果的文本区 public static void main(String args[]) {
TwoStatesButtonDemo2 ts = new TwoStatesButtonDemo2();
ts.go();
} public void go() {
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p4 = new JPanel();
JPanel p5 = new JPanel();
JPanel pa = new JPanel();
JPanel pb = new JPanel();

p1.add(cb1);
p1.add(cb2);
p1.add(cb3);
Border etched = BorderFactory.createEtchedBorder();
Border border = BorderFactory.createTitledBorder(etched, "JCheckBox");
p1.setBorder(border); //设置边框 p2.add(cb4);
p2.add(cb5);
p2.add(cb6);
border = BorderFactory.createTitledBorder(etched, "JCheckBox Group");
p2.setBorder(border); //设置边框

//创建ButtonGroup按钮组,并在组中添加按钮
ButtonGroup group1 = new ButtonGroup();
group1.add(cb4);
group1.add(cb5);
group1.add(cb6);

p3.add(rb1);
p3.add(rb2);
p3.add(rb3);
border = BorderFactory.createTitledBorder(etched, "JRadioButton");
p3.setBorder(border); //设置边框 p4.add(rb4);
p4.add(rb5);
p4.add(rb6);
border = BorderFactory.createTitledBorder(etched, "JRadioButton Group" );
p4.setBorder(border); //设置边框

//创建ButtonGroup按钮组,并在组中添加按钮
ButtonGroup group2 = new ButtonGroup();
group2.add(rb4);
group2.add(rb5);
group2.add(rb6); JScrollPane jp = new JScrollPane(ta); 
p5.setLayout(new BorderLayout());
p5.add(jp);
border = BorderFactory.createTitledBorder(etched, "Results");
p5.setBorder(border); //设置边框 ItemListener il = new ItemListener() {
public void itemStateChanged(ItemEvent e) {
JCheckBox cb = (JCheckBox) e.getSource(); //取得事件源
if (cb == cb1) {
ta.append("\n JCheckBox Button 1 "+ cb1.isSelected());
} else if (cb == cb2) {
ta.append("\n JCheckBox Button 2 "+ cb2.isSelected());
 } else if (cb == cb3) {
ta.append("\n JCheckBox Button 3 "+ cb3.isSelected());
} else if (cb == cb4) {
ta.append("\n JCheckBox Button 4 "+ cb4.isSelected());
} else if (cb == cb5) {
ta.append("\n JCheckBox Button 5 "+ cb5.isSelected());
} else {
ta.append("\n JCheckBox Button 6 "+ cb6.isSelected());
}
}
}; cb1.addItemListener(il);
cb2.addItemListener(il);
cb3.addItemListener(il);
cb4.addItemListener(il);
cb5.addItemListener(il);
cb6.addItemListener(il); ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
JRadioButton rb = (JRadioButton) e.getSource(); //取得事件源
if (rb == rb1) {
ta.append("\n You selected Radio Button 1 "+ rb1.isSelected());
} else if (rb == rb2) {
ta.append("\n You selected Radio Button 2 "+ rb2.isSelected());
} else if (rb == rb3) {
ta.append("\n You selected Radio Button 3 "+ rb3.isSelected());
} else if (rb == rb4) {
ta.append("\n You selected Radio Button 4 "+ rb4.isSelected());
} else if (rb == rb5) {
ta.append("\n You selected Radio Button 5 "+ rb5.isSelected());
} else {
ta.append("\n You selected Radio Button 6 "+ rb6.isSelected());
}
}
}; rb1.addActionListener(al);
rb2.addActionListener(al);
rb3.addActionListener(al);
rb4.addActionListener(al);
rb5.addActionListener(al);
rb6.addActionListener(al);

pa.setLayout(new GridLayout(0,1));
pa.add(p1);
pa.add(p2);
pb.setLayout(new GridLayout(0,1));
pb.add(p3);
pb.add(p4);

Container cp = frame.getContentPane();
cp.setLayout(new GridLayout(0,1));
cp.add(pa);
cp.add(pb);
cp.add(p5);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}

解决方案 »

  1.   

    内部类分为四种:
    静态内部类(static inner class)
    成员内部类(member inner class)
    局部内部类(local inner class)
    匿名内部类(anonymous inner class)------一种特殊的局部内部类(没有名字)
    具体lz可以再网上搜索一下详细的资料 
      

  2.   

    是匿名内部类,在编码过程中发现类的对象只用了一次,为了简便,就不再显示的创建一个实现类。
    其实他就是下面的简化。    class TestListener implements ItemListener {
                public void itemStateChanged(ItemEvent e) {
                    JCheckBox cb = (JCheckBox) e.getSource();    //取得事件源
                    if (cb == cb1) {
                        ta.append("\n JCheckBox Button 1 "+ cb1.isSelected());
                    } else if (cb == cb2) {
                        ta.append("\n JCheckBox Button 2 "+ cb2.isSelected());
                     } else if (cb == cb3) {
                        ta.append("\n JCheckBox Button 3 "+ cb3.isSelected());
                    } else if (cb == cb4) {
                        ta.append("\n JCheckBox Button 4 "+ cb4.isSelected());
                    } else if (cb == cb5) {
                        ta.append("\n JCheckBox Button 5 "+ cb5.isSelected());
                    } else {
                        ta.append("\n JCheckBox Button 6 "+ cb6.isSelected());
                    }
                }
            }
            ItemListener il = new TestListener();
      

  3.   

    匿名内部类,可以使用内部类。可以参考JAVA2核心技术基础卷。
      

  4.   

    一个扩展了ItemListener的匿名内部类
      

  5.   

    Swing已经快被淘汰了,Eclipse的RCP是桌面应用的趋势