콤보박스 만들기

--·2023년 1월 3일
0
  • 콤보박스 초기 화면은 apple로 지정합니다.
  • 다른 과일을 선택하면 그 과일 이미지로 바뀝니다.

코드

package ComboboxPkg;

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class ComboActionEx extends JFrame { // JFrame을 상속 받습니다.
	private String [] fruits = {"apple", "banana", "kiwi", "mango"}; // 콤보박스 리스트인 String객체 배열을 만듭니다.

	public ComboActionEx() { // 생성자를 생성합니다.
		setTitle("콤보박스 활용 예제"); //제목을 정해줍니다.
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 메인 쓰레드가 종료될때 이벤트 쓰레드도 같이 종료되게 종료 코드를 넣어줍니다.
		Container c = getContentPane(); // ContentPane을 생성해줍니다.
		c.setLayout(new FlowLayout()); //배치 관리자는 FlowLayout으로 설정합니다.
		
		
		ImageIcon start=new ImageIcon("images/apple.png"); //ImageIcon객체로 초기 이미지를 설정해줍니다.
		JLabel myLabel=new JLabel(start); // 초기 이미지를 start이미지를 가지고 있는 레이블 생성합니다.
		JComboBox<String> myCombo = new JComboBox<String>(fruits); // String타입의 콤보박스를 생성합니다.
		c.add(myCombo); // 컨테이너에 콤보박스 추가해줍니다.
		c.add(myLabel); // 컨테이너에 레이블을 추가해줍니다.

		myCombo.addActionListener(new ActionListener() { // ActionListener에 이벤트가 발생하면
			public void actionPerformed(ActionEvent e) { // 함수를 오버라이딩합니다.
				JComboBox<String> cb = (JComboBox<String>)e.getSource(); //콤보박스를 getSource해줍니다.
				String name = (String) cb.getSelectedItem(); // getSelectedItem을 통해 선택된 객체의 내용을 가져옵니다.
				ImageIcon image = new ImageIcon("images/"+name+".png"); //ImageIcon객체를 생성해줍니다.
				myLabel.setIcon(image); // setIcon으로 레이블의 이미지를 덧입힙니다.
			}
		});
		setSize(300,250); // 사이즈를 정해줍니다.
		setVisible(true); // 보이게 해줍니다.
	}
	public static void main(String [] args) {
		new ComboActionEx(); // 메인함수에서 객체를 생성합니다.
	}
}

출력화면


어려웠던 점 / 배운 점

  1. 이미지저장을 할 때 저장 위치를 몰라서 헤매가다 src bin이 있는 파일에 images폴더를 생성해서 그 위치에 저장해주었습니다.

  2. actionPerformed() 함수에서 name에 따라 다른 ImageIcon을 생성할 때
    ImageIcon image = new ImageIcon("images/"+name+".png") 이렇게
    "images/"+name+".png" 이러한 String과 변수를 같이 쓸 수 있다는 거를 깨달았습니다.

  3. 콤보박스에서 선택된 값을 가져오는 두 가지 방법이 있습니다.

    3.1 getSelectedItem() 3.2 getSelectedIndex()

    • getSelectedItem()
      선택된 콤보박스의 객체의 래퍼런스를 가져오는 것이고 이때의 자료형은 모든 자료형을 포함 해야할 수 있게 만들었으므로 Object입니다. 그래서 코드에 작성할 때 (String)으로 캐스팅을 해줘야 프로그램이 올바르게 실행됩니다.
    • getSelectedIndex()
      선택된 콤보박스의 인덱스 번호를 리턴하는 것입니다. 리턴형은 인덱스이므로 int형을 리턴하게 됩니다.
  4. 초기 이미지를 apple.png를 초기 이미지로 설정하는 방법은 먼저 ImageIcon으로 ImageIcon 객체를 생성해준 후 생성자에 JLable을 만들어주고 거기에 ImageIcon으로 만든 이미지를 덧붙여 주는 방식을 사용했습니다. 이렇게 만들면 Main함수에서 ComboAtionEx객체가 생성될 때 자동으로 apple.png사진이 초기 화면으로 들어가게 됩니다.

  5. ActionListener에 이벤트가 발생되면 이벤트가 호출되며 리스너에서 actionPerformed
    를 수행하게 됩니다. ActionEvet e 레퍼런스에서 e.getSource()로 소스를 가져와
    getSelectedItem을 수행하여 선택된 콤보박스의 객체 래퍼런스를 가져와서 imageIcon객체를 new ImageIcon("images/"+name+".png") 이러한 방법을 이용하여 생성하면 변수 name에 따라서 이름으로 이미지를 동적으로 생성할 수 있습니다.

0개의 댓글