JListにアイコンとテキストを表示するサンプル
解説
JListにアイコンとテキストを表示するには、自作のListCellRendererが必要になります。
以下のようにDefaultListCellRendererを継承して、getListCellRendererComponentでアイコンとテキストを設定します。
/**
* JList用のセルセンダラー
*/
class FileListCellRenderer extends DefaultListCellRenderer {
FileSystemView fs = FileSystemView.getFileSystemView();
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus);
// valueがFileクラスの場合、テキストとアイコンを設定します。
if (value instanceof File) {
File f = (File) value;
setText(fs.getSystemDisplayName(f));
setIcon(fs.getSystemIcon(f));
}
return this;
}
}
作成したCellRendererは以下のように、JListに設定します。
// 自作のセルレンダラーを設定します
list.setCellRenderer(new FileListCellRenderer());
import java.awt.Component;
import java.awt.ScrollPane;
import java.io.File;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.filechooser.FileSystemView;
/*
* JListにアイコンを追加
* C:\のファイル一覧をJListで表示する
*/
public class JListSample2 extends JFrame {
JList list;
DefaultListModel model;
public JListSample2(String title) {
super(title);
init();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(100, 100, 300, 200);
setVisible(true);
}
private void init() {
// 表示データ作成
File dir = new File("C:\\");
File[] childs = dir.listFiles();
// リストモデルを生成
model = new DefaultListModel();
// 表示データをリストモデルに設定
for (File file : childs) {
model.addElement(file);
}
// リストモデルを使ってJListを作成
list = new JList(model);
// リストモデルは通常スクロールペインを使います。
ScrollPane sp = new ScrollPane();
sp.add(list);
// 自作のセルレンダラーを設定します
list.setCellRenderer(new FileListCellRenderer());
add(sp);
}
public static void main(String[] args) {
new JListSample2("JListを使ってみよう2");
}
/**
* JList用のセルセンダラー
*/
class FileListCellRenderer extends DefaultListCellRenderer {
FileSystemView fs = FileSystemView.getFileSystemView();
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus);
// valueがFileクラスの場合、テキストとアイコンを設定します。
if (value instanceof File) {
File f = (File) value;
setText(fs.getSystemDisplayName(f));
setIcon(fs.getSystemIcon(f));
}
return this;
}
}
}
最終更新:2012年10月08日 19:08