JAVA中对同一问题分别使用内部类与匿名内部类实现,基于轻量级组件Swing中JComboBox组件来举例说明,希望能够有助于深入理解内部类与匿名内部类的区别以及其使用。
package com.han;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
* 设计了一个Swing窗体,其中包括了JComboBox组件(下拉列表框),
* 在下面的代码中运用了内部类的手段。
* @author HAN
*
*/
@SuppressWarnings("serial")
public class SwingJComboBox extends JFrame{
public SwingJComboBox(){
setLayout(null);
setBounds(130,30,300,200);
Container c=getContentPane();
final MyComboBox obj1=new MyComboBox();
@SuppressWarnings({ "unchecked", "rawtypes" })
JComboBox jc=new JComboBox(obj1);
jc.setBounds(0,0,290,20);
// System.out.println(obj1.getElementAt(0));
jc.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
System.out.println(obj1.getSelectedItem());
}
});
JCheckBox jck1=new JCheckBox("男");
JCheckBox jck2=new JCheckBox("女",true);
jck1.setBounds(100,80,40,20);
jck2.setBounds(140,80,40,20);
JButton jb1=new JButton("确定");
JButton jb2=new JButton("取消");
jb1.setBounds(80,130,60,30);
jb2.setBounds(140,130,60,30);
c.add(jc);
c.add(jck1);
c.add(jck2);
c.add(jb1);
c.add(jb2);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //very important !!
}
@SuppressWarnings("rawtypes")
class MyComboBox extends AbstractListModel implements ComboBoxModel {
String selecteditem="军人证";
String[] test={"身份证","军人证","学生证"};
public void setSelectedItem(Object item){
selecteditem=(String)item;
}
public Object getSelectedItem(){
return selecteditem;
}
@Override
public int getSize() {
// TODO Auto-generated method stub
return test.length;
}
@Override
public Object getElementAt(int index) {
// TODO Auto-generated method stub
return test[index];
}
}
public static void main(String[] args){
new SwingJComboBox();
}
}
package com.han;
import javax.swing.*;
import javax.swing.event.ListDataListener;
import java.awt.*;
import java.awt.event.*;
/**
* 设计了一个Swing窗体,其中包括了JComboBox组件(下拉列表框),
* 在下面的代码中运用了匿名内部类的手段。
* @author HAN
*
*/
@SuppressWarnings("serial")
public class SwingJComboBox extends JFrame{
public static String selectedItem;
public SwingJComboBox(){
setLayout(null);
setBounds(130,30,300,200);
Container c=getContentPane();
// final MyComboBox obj1=new MyComboBox();
@SuppressWarnings({ "unchecked", "rawtypes" })
JComboBox jc=new JComboBox(new ComboBoxModel(){
String selecteditem="军人证";
String[] test={"身份证","军人证","学生证"};
// public void getItem(){
// selectedItem=selecteditem;
// }
@Override
public int getSize() {
// TODO Auto-generated method stub
return test.length;
}
@Override
public Object getElementAt(int index) {
// TODO Auto-generated method stub
return test[index];
}
@Override
public void setSelectedItem(Object anItem) {
// TODO Auto-generated method stub
selecteditem=(String) anItem;
}
@Override
public Object getSelectedItem() {
// TODO Auto-generated method stub
// getItem();
selectedItem=selecteditem;
return selecteditem;
}
@Override
public void addListDataListener(ListDataListener l) {
// TODO Auto-generated method stub
}
@Override
public void removeListDataListener(ListDataListener l) {
// TODO Auto-generated method stub
}
});
jc.setBounds(0,0,290,20);
// System.out.println(obj1.getElementAt(0));
jc.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
System.out.println(selectedItem);
}
});
JCheckBox jck1=new JCheckBox("男");
JCheckBox jck2=new JCheckBox("女",true);
jck1.setBounds(100,80,40,20);
jck2.setBounds(140,80,40,20);
JButton jb1=new JButton("确定");
JButton jb2=new JButton("取消");
jb1.setBounds(80,130,60,30);
jb2.setBounds(140,130,60,30);
c.add(jc);
c.add(jck1);
c.add(jck2);
c.add(jb1);
c.add(jb2);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //very important !!
}
public static void main(String[] args){
new SwingJComboBox();
}
}