2011-08-06 4 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를 게시하고 몇 분 내에 답변을 얻습니다. 당신은 일주일 전에 같은 질문을했습니다. (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 이미지의 크기입니다. 이미지가 너무 큰 경우 이미지를 축소하십시오. –