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
원하는 형태로 표현할 수 있게 해준다.
버튼을 수정하는 것처럼, 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
- import java.util.*;
- import javax.swing.*;
- import java.awt.*;
- protected Hashtable icons;
- public IconCellRenderer(){
- //key - value 연관 컨테이너.
- }
- ,boolean isSelected,boolean CellHasFocus){
- setText(text);
- if(!icons.containsKey(text)){
- //key값이 등록되어 있지 않는 경우, 이미지를 만들어
- //text를 key로 하고, img를 value로 해 생성해준다.
- icons.put(text, img);
- setIcon(img);
- }else{
- }
- if(isSelected == true){
- }else{
- }
- return this;
- }
- }
언니팬의 마음을 실어서, 소녀시대리스트와 콤보박스를 만들어보았다.*-_-* 그렇지만, 아홉명을 모두 제작하기엔 힘들어서, 세명만 만들어봄.프로젝트폴더에 data[]의 구성요소와 같은 gif파일이 있어야 한다.
SNSDListCombo.java
- import java.awt.Color;
- import javax.swing.*;
- protected JList list;
- protected JComboBox combo;
- public SNSDListCombo(){
- super("icon List / Combo -cellRenderer Demo");
- list.setCellRenderer(new IconCellRenderer());
- combo.setRenderer(new IconCellRenderer());
- getContentPane().add(combo,"South");
- setDefaultCloseOperation(EXIT_ON_CLOSE);
- setSize(400,600);
- setVisible(true);
- }
- new SNSDListCombo();
- }
댓글
댓글 쓰기