複数選択モード(標準)


単一選択モード


連続した項目なら複数選択できるモード

サンプルダウンロード


解説

JListの複数選択/単一選択サンプルです。

JListの複数選択、単一選択を設定するにはJList.setSelectionModeを使います
設定できるのは以下の3パターンです

複数選択モード(標準)
  • JList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)

単一選択モード
  • JList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)

連続した項目なら複数選択できるモード
  • JList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)

ソース(単一選択になってます。切り替えはコメント解除でどうぞです)

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.ListSelectionModel;
import javax.swing.filechooser.FileSystemView;
 
/*
 * JList複数選択/単一選択サンプル
 * ・JListの複数選択、単一選択を設定するにはJList.setSelectionModeを使います
 * ・設定できるのは以下の3パターンです
 * 
 * 複数選択モード(標準)
 * ・JList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)
 * 
 * 単一選択モード
 * ・JList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
 * 
 * 連続した項目なら複数選択できるモード
 * ・JList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION)
 */
public class JListSingle extends JFrame {
 
	JList list;
	DefaultListModel model;
 
	public JListSingle(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);
 
		// MULTIPLE_INTERVAL_SELECTION = 複数選択モード(標準)
		// list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
 
		// SINGLE_SELECTION = 一個だけ選択できるモード
		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
		// SINGLE_INTERVAL_SELECTION = 連続した項目なら複数選択できるモード
		// list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
 
		// リストモデルは通常スクロールペインを使います。
		ScrollPane sp = new ScrollPane();
		sp.add(list);
 
		// 自作のセルレンダラーを設定します
		list.setCellRenderer(new FileListCellRenderer());
 
		add(sp);
 
	}
 
	public static void main(String[] args) {
		new JListSingle("JList複数選択/単一選択サンプル");
	}
 
	/**
	 * 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;
		}
	}
}