JAVA中对同一问题分别使用内部类与匿名内部类实现

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();
    	
    }
}


你可能感兴趣的:(匿名内部类)