블로거 워누입니다!

최근에는 너무 SDN만 건드린거 같아요! 이제 자바와 HTML도 다시 업데이트 해야 겠습니다! (아무래도 SDN이 프로젝트이다 보니 힘들긴 합니다..)

그럼 바로 본론으로 넘어갈게요!

.

이번 포스팅에서는 자바 Swing에서 지원해주는 JComboBox와 ImageIcon을 활용해서 원하는 이미지를 불러오고자 합니다! 코드는 주석을 합쳐도 100줄이 안넘어가니 부담없이 봅시다!

 

<소스 코드>

import java.awt.*;    // java.awt의 모든 라이브러리 클래스들을 제공받습니다.
import java.awt.event.*; // java.awt.event의 모든 라이브러리 클래스들을 제공받습니다.
import javax.swing.*;  // javax.swing의 모든 라이브러리 클래스들을 제공받습니다.

/*
 * ComboActionEx 클래스를 선언합니다.
 * JFrame을 상속받습니다.
 */

public class ComboActionEx extends JFrame{

 String[] fruits = {"apple", "banana", "mango"}; // String 타입 배열 friuts를 선언합니다.
 // 안의 원소들은 apple, banana, mango입니다. (파일 명이기도 합니다.)
 
 /*
  *  Swing에서 지원해주는 ImageIcon 클래스입니다.
  *  이미지 경로를 저장한 후 화면에 출력하는 역할을 합니다.
  *  ImageIcon 객체를 생성할 때 이름은 일반적으로 이미지 경로의 상위폴더명과 동일하게 합니다.
  *  즉, images라는 폴더는 apple, banana, mango 파일을 가지고 있어야 합니다.
  */
 ImageIcon[] images = { // ImageIcon 클래스 객체 images를 배열로 선언합니다.
   new ImageIcon("images/apple.jpg"), // [0]
   new ImageIcon("images/banana.jpg"), // [1]
   new ImageIcon("images/mango.jpg"), // [2]
 };
 
 // JLabel 객체 imgLabel을 생성합니다. 초기값은 images[0]입니다.
 JLabel imgLabel = new JLabel(images[0]);

ComboActionEx(){ //ComboActionEx를 재정의합니다.
  
  setTitle("ComboBox 활용"); // 창의 이름은 ComboBox로 저장합니다.
  /*
   * Container는 Swing에서 제공하는 라이브러리 클래스입니다.
   * 자바에서 창의 역할을 담당하며 Component들이 올려질 영역입니다.
   * contentPane은 화면에 출력될 Component들이 부착될 공간입니다.
   */
  
  Container c = getContentPane();
  
  // Container 클래스 객체 C를 생성 후 contentPane을 가져옵니다.  
  c.setLayout(new FlowLayout()); // c의 레이아웃를 FlowLayout 클래스를 생성하여 잡아줍니다.
  JComboBox combo = new JComboBox(fruits); // ComboBox 클래스 객체 combo를 선언합니다. fruits[0]을 초기값으로 합니다.
  c.add(combo); // 컨테이너(창)에 combo를 더합니다.
  c.add(imgLabel); // 컨테이너에 imgLabel을 더합니다.
  
  /*
   * ActionListener는 보통 버튼에 이벤트가 발생하면 실행됩니다.
   * 아래 코드를 통해 콤보박스에서 선택한 것에 대한
   * 이벤트 처리입니다.
   */
  combo.addActionListener(new ActionListener(){ // combo에 ActionListner를 설정합니다.
   public void actionPerformed(ActionEvent e){ // actionPerformed 메서드를 통해 이벤트 처리에 대한 동작을 구현합니다.
    JComboBox cb = (JComboBox) e.getSource(); // 동작이 일어날 소스를 JComboBox 형태로 받습니다.
    int index = cb.getSelectedIndex(); // int 타입 index를 선언하고 콤보박스에서 선택된 번호 값으로 저장합니다.
    imgLabel.setIcon(images[index]); // imgLabel에 image[index]를 불러옵니다.
   } // end actionPerformed()
  }); // end combo.addActionListener
  
  setBounds(50, 50, 400, 400); // 윈도우 상에서 위치를 잡아 준 후(가로 50, 세로 50) 창의 크기를 설정합니다.(가로 400, 세로 400)
  setVisible(true); // 윈도우에서 클래스를 구현한 창이 보이게끔 합니다.
 } // end ComboActionEx()
 
 public static void main(String[] args) { // 프로그램의 실행지점인 main 메서드입니다.
  // TODO Auto-generated method stub
  new ComboActionEx(); // new 연산자를 이용하여 ComboActionEx()를 실행합니다.
 } // end main

} // end class

 

 

이클립스에서 보니 70줄도 안되네요ㅎㅎ 주석도 한줄마다 달아서 쉽게 이해하실 수 있을 겁니다!

.

여기서 주의하실 점!

(아래 그림을 참고하세요!!!)

.

 

.

이렇게 이미지 경로를 잡아주어야 합니다!

(이클립스 내에서 폴더 생성을 하고 이미지를 Ctrl+C / Ctrl + V로 밀어 넣으셔도 됩니다.)

이걸 안해주시면 당연히 이미지를 불러 올 수 없으므로 에러가 발생하겠죠?

자, 그럼 어떻게 빌드가 되었는지 한번 볼까요?

.

.

와아~ 이미지가 보여요!

이미지 중에 제일 작은 망고 이미지에 맞추다 보니 사과 사진이 좀 잘렸네요..ㅜ 나중에 업그레이드 시켜야겠습니다ㅎㅎ 그럼 다른 항목들은 괜찮은지 콤보박스를 이용해 목록을 바꿔보겠습니다.

.

.

오오.. 망고는 잘 맞고.. 바나나는 잘렸네요!ㅜㅜ 괜찮습니다!

지금은 GUI를 이용해 이미지를 가지고 놀아봤다는 거 자체로 만족할려고 합니다! 그리고 조금씩 실력을 키워서 저런 것들을 능숙하게 다룰 수 있도록 노력해봐야 겠습니다!

.

코드는 짧은데 포스팅이 길어지면 읽기도 지루하시겠죠?ㅋㅋ

(쓰는 저도 살짝 지루해질뻔...ㅎ)

그러므로 저는 이만 포스팅을 마무리하겠습니다. 다음 포스팅에서 만나요~

안녕~~~

+ Recent posts