2011-08-06 2 views
1

私は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; 
} 
    } 

リストには、画像を現在示していないが?

+1

が、これがどのように動作するかを参照してください含まれてい。あなたは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

+0

よく置いてください。大量のコードを投稿せずに小さな例を作る方法を完全には分かっていなかったというSSCCEを立てることを拒否したわけではありません。 – Warz

+0

それはSSCCEについての私の指摘です。コードを単純化する方法がわからない場合は、あなたが求めている質問を本当に理解できません。今見たように、StudentListenerクラスは問題に完全に無関係で、間違った場所を見ると問題を解決することはできません。今度はあなたがSSCCEを作成する方法を知っているので、私は将来もっと多くを見ることを期待しています:) – camickr

答えて

2

それは本当に驚くべきことではないのです。

  • アイコンマップからアイコンを取得するためのキーとしてJListの項目の値を使用します。
  • アイコンマップは、単一のキーが含まれています:「名前」
  • するJListは、「スミス」、「ジョン」、「ボブ」と「キム」、ない「名前」
+0

大丈夫私はそれを私のリストに追加しました。リストに表示されるアイコンのサイズを設定する方法を知っていますか? – Warz

+0

アイコンのサイズは、基礎となるPNGイメージのサイズです。画像が大きすぎる場合は、画像を縮小してください。 –

関連する問題