JListで、配列やVectorをsetListDataした場合には、superがjavax.swing.AbstractListModelの匿名クラスが生成される。
2007/11/28
java
swing
JListで、配列やVectorをsetListDataした場合には、superがjavax.swing.AbstractListModelの匿名クラスが生成される。
このmodelがJList内部で保持されるものになります。よくWebとかでみかけるサンプルで紹介されるDefaultListModelでないことに注意すること。
javax.swing.DefaultListModelを使うと、remove,addとかのメソッドが用意されているので、
getModelしてモデルの操作が簡単に行えるけど、配列やVectorをsetListDataした場合はgetModelしてもDefaultListModelが返ってこないので、
キャスト例外がおきる。
下記のコードは、java.lang.ClassCastExceptionが発生します。
String[] ss = { "aa", "bb", "cc" };
JList list = new JList(new DefaultListModel());
list.setListData(ss);
DefaultListModel model = (DefaultListModel)list.getModel();
System.out.println(model.getClass());
JList list = new JList(new DefaultListModel());
list.setListData(ss);
DefaultListModel model = (DefaultListModel)list.getModel();
System.out.println(model.getClass());
DefaultListModelに配列とか別のコレクションから作成できる仕組みがあればいいのにと思いましたがどうでしょうか?
: