본문 바로가기
Back/JAVA

JList에 이미지(ImageIcon)를 넣은 JLabel 붙이기

by 시월해 2021. 4. 1.

순서

1. Image Icon을 만든다.

2. DefaultListModel 객체를 만든다.

3. DefaultListModel에 만든 Image Icon을 addElement()한다.

4. JList에 만든 Model을 setModel() 해준다.

 

응용(ImageIcon이 너무 커서 JList에 제대로 표시되지 않는다면?)

5. Image로 선언하여 사이즈 변환 후 ImageIcon으로 캐스팅한다.

6. CellListRenderer 클래스를 만들어 재정의 해준다.

7. CellListRenderer 클래스를 호출한다.

8. 본인이 원하는 컴포넌트(JLabel, Jpane 등)를 선언하여 ImageIcon을 셋팅한다.

 

위 단계를 거치면 리스트의 각 셀이 이미지에 딱 맞춰진다.

//리스트 모델 선언
DefaultListModel skinModel = new DefaultListModel(); 

// 이미지 리사이징
Image img = new ImageIcon(getClass().getResource("../images/back.jpg")).getImage();
Image imgResize = img.getScaledInstance(100, 100, java.awt.Image.SCALE_SMOOTH);

//리스트 모델에 이미지 삽입
skinModel.addElement(new ImageIcon(imgResize, "back.jpg")); 

// 리스트 선언
JList skinJList = new JList(); 

// 리스트에 모델 셋팅
skinJList.setModel(skinModel); 

// 이미지 크기에 따른 셀 크기 조절 클래스
skinJList.setCellRenderer(new CustomListRenderer());
public class CustomListRenderer implements ListCellRenderer {

   @Override
   public Component getListCellRendererComponent(JList list, Object value, int index,
        boolean isSelected, boolean cellHasFocus) {

	JLabel skinLabel = new JLabel();
        //라벨 이미지아이콘 셋팅
	skinLabel.setIcon((ImageIcon) value);
	skinLabel.setText("back.jpg");
        //라벨 텍스트 색상 조정
	skinLabel.setForeground(new Color(255,0,1));
        //라벨 텍스트 하단으로 위치 조정
	skinLabel.setHorizontalTextPosition(JLabel.CENTER);
	skinLabel.setVerticalTextPosition(JLabel.BOTTOM);
        //만든 이미지라벨 반환
	return skinLabel;
   }
 
}

 

결과