JAVA CellRenderer Demo

List의 하나의 구성요소들이 표현되는 하나하나를 Cell이라고 하고, 그 Cell을 Render를 통해서
원하는 형태로 표현할 수 있게 해준다.

버튼을 수정하는 것처럼, List, ComboBox,Tree등 Cell을 편집 할 수 있는데,
그러기 위해서는 Renderer Interface를 구현하여야 한다.

List의 경우, ListCellRenderer Interface를 구현해야한다.
default Renderer들은 기본적으로 JLabel을 상속받음으로 JLabel의 메소드를 사용할 수 있다.

ListCellRenderer를 변형하여, List와 관련된 아이콘을 찾아서 같이 표현해주는 Renderer를 구현해보자.

ListCellRenderer에는

public Component getListCellRendererComponent(JList list,Object value,int index            ,boolean isSelected,boolean CellHasFocus)


 ListCellRenderer를 구성하는 Component를 가져오는 메소드가 있다.

IconCellRenderer.java

  1. import java.util.*;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. public class IconCellRenderer extends DefaultListCellRenderer{
  5.     protected Hashtable icons;
  6.     public IconCellRenderer(){
  7.         //key - value 연관 컨테이너.
  8.         icons = new Hashtable();
  9.     }
  10.    
  11.     public Component getListCellRendererComponent(JList list,Object value,int index
  12.             ,boolean isSelected,boolean CellHasFocus){
  13.                 String text = value.toString();
  14.                 setText(text);
  15.                 if(!icons.containsKey(text)){
  16.                     //key값이 등록되어 있지 않는 경우, 이미지를 만들어
  17.                     //text를 key로 하고, img를 value로 해 생성해준다.
  18.                     ImageIcon img = new ImageIcon(text+".gif");
  19.                     icons.put(text, img);   
  20.                     setIcon(img);
  21.                 }else{
  22.                     setIcon((ImageIcon)icons.get(text));
  23.                 }
  24.                
  25.                 if(isSelected == true){
  26.                     setBackground(Color.white);
  27.                     setForeground(Color.black);
  28.                 }else{
  29.                     setBackground(Color.lightGray);
  30.                     setForeground(Color.black);
  31.                 }
  32.                 return this;
  33.             }
  34. }


    언니팬의 마음을 실어서, 소녀시대리스트와 콤보박스를 만들어보았다.
    *-_-* 그렇지만, 아홉명을 모두 제작하기엔 힘들어서, 세명만 만들어봄.
    프로젝트폴더에 data[]의 구성요소와 같은 gif파일이 있어야 한다. 

    SNSDListCombo.java

    1. import java.awt.Color;
    2. import javax.swing.*;
    3. public class SNSDListCombo extends JFrame {
    4.     protected JList list;
    5.     protected JComboBox combo;
    6.    
    7.     public SNSDListCombo(){
    8.         super("icon List / Combo -cellRenderer Demo");
    9.         String[] data = {"TaeYeon","YoonA","Tiffany"};
    10.         list = new JList(data);
    11.         list.setBackground(Color.lightGray);
    12.         list.setCellRenderer(new IconCellRenderer());
    13.         getContentPane().add(new JScrollPane(list),"Center");
    14.        
    15.         combo= new JComboBox(data);
    16.         combo.setRenderer(new IconCellRenderer());
    17.         getContentPane().add(combo,"South");
    18.        
    19.         setDefaultCloseOperation(EXIT_ON_CLOSE);
    20.         setSize(400,600);
    21.         setVisible(true);
    22.     }
    23.    
    24.     public static void main(String[] args) {
    25.         new SNSDListCombo();
    26.     }
    27. }



댓글

이 블로그의 인기 게시물

[Win32 API] WINAPI - 함수호출규약

JAVA Frame Icon setting

JAVA Spinner