국비지원

[JAVA]221202 - MouseListener, MouseAdapter, 익명클래스, KeyListener, JDialog

yeon-96 2022. 12. 4. 14:36
반응형

 

 

 

MouseListener

'JFrame'에 마우스리스너라는 기능은 마우스클릭 외의 다양한 동작을 활용할 수 있는 인터페이스다.

마우스리스너에는 mousePressed, mouseReleased, mouseEntered, mouseExited 추상 메소드가 포함되어있다.

 

 

mousePressed

사용자가 마우스를 눌렀을 때 이벤트가 발생하는 메소드다.

 

mouseReleased

사용자가 마우스버튼을 눌렀다가 뗏을 때 이벤트가 발생하는 메소드다.

 

mouseEntered

마우스 커서가 컴포넌트 안으로 위치할 때 이벤트가 발생하는 메소드다.

 

mouseEntered

마우스 커서가 컴포넌트안에서 밖으로 위치할 때 이벤트가 발생하는 메소드다.

 

MouseAdapter

'MouseAdapter'클래스는 생성 후 마우스리스너의 메소드 중 내가 원하는 메소드만 오버라이딩하여 사용할 수 있다.

(java에서는 클래스를 클래스 내부에서 사용가능하다.)

내가 원하는 메소드만 오버라이딩 하자

익명클래스 생성

우리는 이미 'JFrame'을 상속받아서 클래스를 구성하고 있는데 'MouseAapter'  또한 하나의 클래스이기에 다중상속이 불가능한 상황이다. 이런 상황에서 익명의 클래스를 생성하여 활용할 수 있다. 하지만 생성자는 만들 수 없고, 변수와 메소드만 활용이 가능하다는 점을 주의해야한다.

중괄호를 꼭 붙여 사용하자

 

보통의 지역클래스는 내부에서 사용하기위해 생성하고, 그래서 'private'를 보통은 붙이고 사용한다.

외부에서 접근하기 위해선 지역클래스를 감싸고 있는 클래스 인스턴스를 생성한 후 접근이 가능하다.

지역클래스에서는 밖에 있는 클래스의 변수를 자기 것처럼 사용이 가능하다.

하지만 지역클래스에서 선언된 변수는 외부에서 접근할 수 없다.

메소드 내부에도 클래스가 존재할 수 있고, 해당 메소드에서만 클래스를 사용하기위해 생성된다.

KeyListener

'JFrame'에 마우스리스너라는 기능은 마우스클릭 외의 다양한 동작을 활용할 수 있는 인터페이스다.

마우스리스너에는 mousePressed, mouseReleased, mouseEntered, mouseExited 추상 메소드가 포함되어있다.

 

keyTyped

사용자가 글자를 하나 타이핑했을 때 이벤트가 발생하는 메소드다.

글자일때만 이벤트가 발생하고, 방향키 등등 글자가 아닌 key에는 이벤트가 발생하지 않는다.

 

keyReleased

사용자가 키를 눌렀다가 떼었을 때 이벤트가 발생하는 메소드다.

'getKeyChar'메소드는 사용자가 어떤 키를 눌렀는지 'char'형으로 가져와준다. 마찬가지로 문자가 아닌 키는 가져오는 값이 없다.

 

keyPressed

 

키보드에 있는 모든 키를 인식하여 이벤트를 발생시킨다.

'getKeyCode'메소드는 입력받은 키의 값을 정수형태로 나타낸다. 

'KeyEvent'클래스에는 키의 값이 상수값으로 저장되어있다. (VK_'key')

'KeyEvent'클래스에는 'getKeyText' 라는 정적메소드가 있는데 정수형태의 매개변수를 입력받으면 해당 키를 문자열로 출력해준다.

 

JDialog

'JFrame'은 하나의 창을 동작하고 활용하는데에 초점을 맞춘 클래스라면, 'JDialog'는 그 창외에 서브로 생성될 창의 동작과 활용을 위한 클래스이다. 모달형과 미모달형이 존재하는데 모달형은 서브창이 떠있을 때, 메인창을 닫거나 동작할 수 없으며, 비모달형은 서브창과 메인창의 상호작용은 하지만 메인창이 동작하거나 닫을 수 있다.

'JDialog'는 기본값으로 'DISPOSE_ON_CLSE'이며, 'JFrame'을 종료하지만 프로그램은 계속 실행된다는 뜻이다.

모달형으로 활용시  꼭 'setModal(true)'하는 것을 잊지말자

서브창과 메인창의 활용할 수 있는 JDialog

JDialog의 정적메소드

'JDialog'에는 옵션페이지가 정적메소드형태로 만들어져있다.

다양한 옵션페이지

public class Main2 {
	public static void main(String[] args) {
//		Dialog에서 옵션페이지가 만들어져있음
		JOptionPane.showMessageDialog(null, "메세지 보여주기");
		JOptionPane.showMessageDialog(null, "경고 내용", "제목", JOptionPane.WARNING_MESSAGE);
		JOptionPane.showMessageDialog(null, "에러 내용", "에러", JOptionPane.ERROR_MESSAGE);
		
		String name = JOptionPane.showInputDialog("이름이 뭐니?");
		if (name == null) {
			JOptionPane.showMessageDialog(null, "에러 내용", "에러", JOptionPane.ERROR_MESSAGE);
		} else {
			JOptionPane.showMessageDialog(null, name + "환영");
		}
	}
}

*확인용다이얼로그 옵션페이지

YES_NO_OPTION
YES_NO_CANCEL_OPTION

 

반응형