Image List

javax.swing.JListをつかうと、画像付きリストが簡単に作成できる。これはJava2 SDK についている jfc/SwingSet2 のデモにも含まれているので知っている人も多いだろう。リストの項目は本来はjavax.swing.DefaultListModelを使って作成するべきだが、今回は参照するだけなのでお手軽な配列を使っている。

プログラムのポイントは、描画を受け持つComponentを返却するgetListCellRendererComponentメソッドを持つクラスを用意するという点だ。

package org.sssg.four.java;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class ImageList extends JFrame implements ListSelectionListener {
private JList jlist;
public ImageList() {
getContentPane().setLayout(new BorderLayout());
jlist = new JList(new String[]{ “Java”, “C++”, “Lisp”, });
jlist.setCellRenderer(new ImageCellRenderer());
jlist.addListSelectionListener(this);
getContentPane().add(jlist, BorderLayout.CENTER);
setSize(150, 140);
}
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) {
return;
}
Object[] selected = jlist.getSelectedValues();
for (int i = 0; i < selected.length; i++) { System.out.println(selected[i]); } } class ImageCellRenderer extends JLabel implements ListCellRenderer { public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { setText(value.toString()); if (isSelected) { setForeground(Color.BLUE); } else { setForeground(Color.BLACK); } setIcon(new ImageIcon("about.png")); return this; } } public static void main(String[] args) { ImageList f = new ImageList(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }

同じカテゴリの記事: Java