私はArrayListからデータを取得しているJListの簡単な例を持っていますが、リスト内の各文字列の隣に画像を表示します。私はアイコンとオブジェクトを横に並べて表示すると思われるカスタムセルレンダラー(IconListRenderer)を作成しました。ここで画像とテキストを含むJList:テキストがArrayListから来る場所<String>
は、実行中のサンプルです。
//Test class showing the list in a frame
import java.awt.Color;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;
import javax.swing.border.LineBorder;
public class Test extends JFrame{
public static void main(String[] args) {
final JFileChooser chooser = new JFileChooser();
JButton button = new JButton();
button.setText("Upload");
JFrame frame = new JFrame("My Frame");
JList list = new JList();
Map<Object, ImageIcon> icons = new HashMap<Object, ImageIcon>();
list.setBorder(new LineBorder(Color.BLACK));
ImageIcon icon = new ImageIcon("/Images/400px-Greek_uc_sigma.png");
ArrayList<String> arrayList = new ArrayList<String>();
icons.put("Name", icon);
//populate the arrayList for testing
arrayList.add("Smith");
arrayList.add("John");
arrayList.add("Bob");
arrayList.add("Kim");
frame.setSize(new Dimension(400, 400));
//set the list data
list.setListData(arrayList.toArray());
final JFrame imageFrame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
list.setCellRenderer(new IconListRenderer(icons));
frame.add(list);
frame.setVisible(true);
frame.repaint();
}
}
// IconListRendererクラス
import java.awt.Component;
import java.util.Map;
import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;
public class IconListRenderer
extends DefaultListCellRenderer {
private Map<Object, ImageIcon> icons = null;
public IconListRenderer(Map<Object, ImageIcon> icons) {
this.icons = icons;
}
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
// Get the renderer component from parent class
JLabel label =
(JLabel) super.getListCellRendererComponent(list,
value, index, isSelected, cellHasFocus);
// Get icon to use for the list item value
Icon icon = icons.get(value);
// Set icon to display for value
label.setIcon(icon);
return label;
}
}
リストには、画像を現在示していないが?
が、これがどのように動作するかを参照してください含まれてい。あなたはSSCCEを投稿し、2〜3分以内に回答を得ます。あなたは一週間前に同じ質問をしました(http://stackoverflow.com/questions/6884973/displaying-an-imageicon-in-a-jlist-that-uses-a-different-object-to-load-the-jlist )。私はあなたにその時の答えを教えてもらえたかもしれませんが、SSCCEの投稿を拒否しましたので、私は答えを拒否しました。 – camickr
よく置いてください。大量のコードを投稿せずに小さな例を作る方法を完全には分かっていなかったというSSCCEを立てることを拒否したわけではありません。 – Warz
それはSSCCEについての私の指摘です。コードを単純化する方法がわからない場合は、あなたが求めている質問を本当に理解できません。今見たように、StudentListenerクラスは問題に完全に無関係で、間違った場所を見ると問題を解決することはできません。今度はあなたがSSCCEを作成する方法を知っているので、私は将来もっと多くを見ることを期待しています:) – camickr