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