内部クラス例1

JComboBoxで選択した項目で、内部クラスのリストに、このマシンで扱える画像拡張子をリストアップしています。

package paint;
import java.awt.*;//Point、Color Graphicsなどのパッケージ
import javax.swing.*;//JPanelのパッケージ
import java.awt.event.*;//ItemListenerなどのリスナーや、イベント用

class ImageFormatPanel extends JPanel{
	
	JComboBox comboBox = new JComboBox(new String[] {"WriterFormatName","ReaderFormatName"} );

	ImageList list = new ImageList();
	//----インナー(内部)クラス リスト-------------------------------------
	class ImageList extends  JList
	{
		DefaultListModel listModel = new DefaultListModel(); //リスト操作用
		ImageList(){//コンストラクタ
			setModel(listModel);
			setPreferredSize(new Dimension(240, 180) ); //望むサイズ指定
			setWriterFormatName();//書き込み可能な画像ファイルの種類
		}
		void setList(String []array){
			listModel.clear();//リスト項目クリア
			for(int i = 0; i < array.length; i++){
				listModel.add(i,array[i]);//挿入
			}
		}
		void setWriterFormatName(){//書き込み可能な画像ファイルの種類をセット
			String[] formats = javax.imageio.ImageIO.getWriterFormatNames();
			setList(formats);
		}
		void setReaderFormatName(){//読み込み可能な画像ファイルの種類をセット
			String[] formats = javax.imageio.ImageIO.getReaderFormatNames();
			setList(formats);
		}
	}//----インナー(内部)クラスの終端--------------------------------------------

	public ImageFormatPanel(){//コンストラクタ		this.setLayout(new BorderLayout());
		this.add(comboBox, BorderLayout.NORTH);
		this.add(new JScrollPane(list), BorderLayout.CENTER);

		//ItemListener itemProc = new ItemProc();メソッドの中の下で定義したクラス名は使えません。	
		//----インナー(内部)クラス インターフェイス-------(匿名クラスで作れます)----------------------
		class ItemProc implements ItemListener
		{
			public void itemStateChanged(ItemEvent e){//ItemListenerの実装メソッド
				//項目を変更した時、選択解除前と新しい選択の2つが呼び出されます。
				if (e.getStateChange() == ItemEvent.SELECTED){//選択時
					int i = comboBox.getSelectedIndex();
					if (i == -1) return;
					String s = (String)comboBox.getSelectedItem();
					if (s.equals("WriterFormatName")){
						list.setWriterFormatName();//書き込み可能な画像ファイルの種類をセット
					}else if (s.equals("ReaderFormatName"))	{
						list.setReaderFormatName();//読み込み可能な画像ファイルの種類をセット
					}
				}
			}
		}//----インナー(内部)クラスの終端--------------------------------------------
		ItemListener itemProc = new ItemProc();	//上で定義した内部クラスを生成
		comboBox.addItemListener(itemProc);
	}
}

public class ImageFormatList extends JApplet
{
	public ImageFormatList(){
		this.setContentPane(new ImageFormatPanel());//上記パネルをフレームのパネルとして設定
	}
	public static void main(String []args){
		ImageFormatListFrame frame = new ImageFormatListFrame();
		frame.pack();
		frame.setVisible(true);		
	}
}