1) 아이템리스너 (ItemListener)

체크박스를 클릭하면 아이템이 선택된다. 체크박스는 두개 이상의 아이템을 선택할 수 있다. ItemListener에는 itemStateChanged 라는 메소드가 있다. 아이템 리스너를 구현할 때는 이것 하나만 오버라이드 해주면 된다.

 

어떤 아이템을 클릭했는지 ItemEvent클래스의 참조를 통해서 확인할 수 있다. Checkbox1, 2 두개가 있다면 어떤 Checkbox 를 클릭했는지, 그리고 다음에는 체크표시를 한것인지 (true) 안한 건지(false)에 따라 삼항연산자를 적용한다.(간략한 if문이다) State상태가 true면 checked false 면 unchecked 다.

 

*삼항 연산자 식 : 조건 ? 참일때 항 : 거짓일때 항

str = (a == 1 ? "a is 1" : "a is not 1") a가 1이면 "a is 1" , a 가 1이 아니면  "a is not 1" 을 반환.

 

-> str = "a is 1"; // 의 결과값을 str에 저장

 

체크박스

import java.awt.*;
import java.awt.event.*;

public class AwtGUI8 extends Frame implements ItemListener,KeyListener,WindowListener{
	int count=0;
	Label lb1;
	Label lb2;
	Checkbox cb1;
	Checkbox cb2;
	TextArea ta1;
	
	AwtGUI8(){
		
		// Checkbox ItemEvent
		
		lb1 = new Label("BLANK");
		lb1.setAlignment(lb1.CENTER);
		lb1.setSize(300,100);
		
		cb1 = new Checkbox("CHECK 1");
		cb1.setBounds(100,100,80,50);
		cb2 = new Checkbox("CHECK 2");
		cb2.setBounds(100,150,80,50);
		
		cb1.addItemListener(this);
		cb2.addItemListener(this);
		
		// KeyListener
		
		lb2 = new Label("First Pos");
		lb2.setBounds(100, 200, 150, 50);
		
		ta1 = new TextArea();
		ta1.setBounds(100,250,300,300);
		
		ta1.addKeyListener(this);
		
		// WindowEvent
		
		addWindowListener(this);
		
		
		// Below is Frame
		
		add(lb1);add(cb1);add(cb2);
		add(lb2);add(ta1);
		setTitle("Item Listener Interface");
		setSize(500,700);
		setLayout(null);
		setVisible(true);
		
	}
	public static void main(String[] args) {
		new AwtGUI8();
	}
	@Override
	public void itemStateChanged(ItemEvent e) {
		if(e.getSource() == cb1)
			lb1.setText("Checkbox 1 : "
					+ (e.getStateChange()==1?"checked" : "unchecked"));
		if(e.getSource() == cb2)
			lb1.setText("Checkbox 2 : "
					+ (e.getStateChange()==1?"checked" : "unchecked"));
	}
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		lb2.setText("KEY TYPED");
	}
	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		lb2.setText("KEY PRESSED");

	}
	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		lb2.setText("KEY RELEASED");

	}
	@Override
	public void windowOpened(WindowEvent e) {
		// TODO Auto-generated method stub
		System.out.println("Opend");
	}
	
	@Override
	 public void windowClosing(WindowEvent e) {
		// TODO Auto-generated method stub
		System.out.println("Closing");
		System.exit(0);
	}
	@Override
	public void windowClosed(WindowEvent e) {
		// TODO Auto-generated method stub
		System.out.println("Closed");

	}
	@Override
	public void windowIconified(WindowEvent e) {
		// TODO Auto-generated method stub
		System.out.println("Iconified");

	}
	@Override
	public void windowDeiconified(WindowEvent e) {
		// TODO Auto-generated method stub
		System.out.println("Deiconified");

	}
	@Override
	public void windowActivated(WindowEvent e) {
		// TODO Auto-generated method stub
		System.out.println("Activated");

	}
	@Override
	public void windowDeactivated(WindowEvent e) {
		// TODO Auto-generated method stub
		System.out.println("Deactivated");

	}
}

2) 키 리스너 (KeyListener)

 

키 리스너는 3개의 메소드를 구현해야한다. 키를 입력할 수 있는 컴포넌트는 현재 텍스트에리어다. 텍스트에리어에 글자를 입력하기 시작하면 레이블이 그때의 상태에 따라 동작한다. 키보드를 누른 상태는 Key Pressed(눌림) 눌렀다 때면 Key Releassed, 각 메서드들의 이름은 해당 동작을 의미하기 때문에 쉽게 이해할 수 있다.

 

인터페이스는 클래스의 일종이다. 클래스와 다른 점은 여러 인터페이스에서 상속을 받을 수 있다. 지금 100% 이해를 못해도 괜찮다. 인터페이스는 자바를 배우는 과정에서 가장 이해하기 어려운 내용에 속한다. OOP에 대한 깊은 이해를 하기 위해서는 프로그래밍 언어를 배우는 것 이상을 요구한다.

 

관심있는 분에게는 최근에 5팡이 나온 '객체지향 사고 프로세스' 라는 책과 '스프링 입문을 위한 자바 객체 지향의 원리와 이해'를 추천한다. 전자는 외서의 번역판이고, 후자는 저자 김종민 님이 유튜브에 10시간 이상 저자 직강의 강의를 올리셨다. (유튜브 강의는 무료다!)

 

 

객체지향 사고 프로세스

원리와 개념 중심으로 익히는 객체지향 사고방식! 『객체지향 사고 프로세스』는 객체지향 프로그래밍을 기술뿐 아니라 개념 수준, 더 나아가서는 철학 수준에서부터 다룬다. 또한, 프로그래머

www.yes24.com

 

 

스프링 입문을 위한 자바 객체 지향의 원리와 이해

자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량 애플리케이션 프레임워크인 스프링은 자바와 객체 지향이라는 기반 위에 굳건히 세워져 있다. 따라서 스프링을 제대로 이해하고 활용��

www.yes24.com

*김종민 작가님의 스프링 입문을 위한 자바 객체 지향의 원리와 이해 저자 직강

 

스프링 입문을 위한 자바 객체 지향의 원리와 이해

[스프링 입문을 위한 자바 객체 지향의 원리와 이해] 라는 책의 내용을 저자가 핵심 요약하여 강의합니다. 책 소개: http://www.yes24.com/24/goods/17350624 방송참여: https://www.facebook.com/groups/codecoast/

www.youtube.com

3) 윈도우리스너 (WindowListener)

 

그 동안 AWT 로 생성한 윈도우창을 닫기 위해서 익명 클래스를 사용했다. 이 포스트에서는 인터페이스를 구현한다.

 

public void windowClosing(WindowEvent e){

    System.exit(0);

}

 

이 메서드는 윈도우의 닫기 버튼  'X'을 클릭했을 때 발생한다. 인터페이스 WindowListener를 구현하려면 소속된 메서드들을(windowOpened 등)을 전부 오버라이드 해야한다. 안그러면 컴파일 오류가 난다. 간단한 윈도우 프로그램의 경우 창을 닫기 위한 코드가 너무 길어지니까 수고수러움을 줄이기 위해서 WindowAdapter로 익명클래스를 사용한다.

 

이 소스 코드에서는 전부 구현해줬다. 딱히 메서드에 내용이 없으면 

 

public void windowIconified(WindowEvent e){ }

 

이렇게만 implement 해도 된다. windowClosing은 종료하기 위해 사용했다.

 

https://docs.oracle.com/javase/8/docs/api/java/awt/event/WindowListener.html

 

WindowListener (Java Platform SE 8 )

All Superinterfaces: EventListener All Known Implementing Classes: AWTEventMulticaster, BasicToolBarUI.FrameListener, JMenu.WinListener, WindowAdapter public interface WindowListener extends EventListener The listener interface for receiving window events.

docs.oracle.com

그림으로 관계를 아래와 같이 그려본다.

 

객체지향 프로그래밍이 절차적 프로그래밍에 비해서 복잡하게 보일 수 있다.

 

자바 GUI라는 좀 딱딱한 주제라서 그런가 보다. 좀더 인간적인 예시도 참고하게 되면 더 나을 것이다.

(동물 클래스 상속하는 인간클래스 같은 내용)

 

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band