Post

22.06.03 TIL

22.06.03 TIL

JAVA - InnerClass

필드나 메소드처럼 내부 클래스도 멤버이다. 내부 클래스는 포함되어진 클래스의 모든 멤버를 참조할 수 있다.

내부 클래스를 사용하는 이유 특정 멤버변수를 외부에서 자주 사용한다고 할 때 이를 public으로 선언하는 것은 캡슐화 개념에 어긋난다. 이런 경우 내부 클래스를 사용하면 특정 멤버 변수를 private로 유지하면서 자유롭게 사용할 수 있다. 특히 그래픽 이벤트 처리기에서 주로 사용된다.

하나의 장소에서만 사용되는 클래스들을 한곳에 모을 수 있다. 만약 클래스가 하나의 장소에서만 필요하다면 클래스를 분리하기 보다 클래스의 내부에 위치시키는 것이 가독성이 좋다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class OutterClass {
	private String secret = "This is money";
	
	public OutterClass() {
		InnerClass obj = new InnerClass();
		obj.print();
	}
	
	private class InnerClass {
		public InnerClass() {
			System.out.println("내부 클래스 생성자 입니다.");
		}
		
		public void print() {
			System.out.println(secret);
		}
	}
}

JAVA - 무명 클래스(Anonymous Class)

클래스의 몸체는 정의되지만 이름이 없는 클래스. 무명클래스는 클래스를 정의하면서 동시에 객체를 생성한다. 이름이 없기때문에 한 번만 사용이 가능하다. 무명클래스는 하나의 객체만 생성하면 되는 경우에 사용한다. 무명클래스는 그래픽 사용자 인터페이스의 이벤트 처리기를 구현하는 경우에 사용된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
interface RemoteControl {
	void turnOn();
	void turnOff();
}

public class AnonymousClasstTest {
	public static void main(String[] args) {
		RemoteControl rc = new RemoteControl() {

			@Override
			public void turnOn() {
				System.out.println("TV turnOn");
			}

			@Override
			public void turnOff() {
				System.out.println("TV turnOFf");
			}
		};
		rc.turnOff();
		rc.turnOn();
	}
}

JAVA - ActionEventListener

  1. 이벤트 종류
  2. 이벤트 소스
  3. 화면 내 이벤트가 발생한 마우스 좌표 : getPoint(), getX(), getY()
  4. 컴포넌트 내 이벤트가 발생한 경우 버튼이나 메뉴 아이템의 문자열
  5. 클릭된 마우스 버튼 번호 : getButton()
  6. 마우스의 클릭횟수 : getClickCount()
  7. 키가 눌려졌다면 키의 코드 값과 문자 값
  8. 체크박스, 라디오 버튼에 이벤트가 발생하였다면 체크상태
  9. Object getSource() : 현재 발생한 이벤트의 소스 컴포넌트의 래퍼런스를 리턴한다. 반환타입이 Object이므로 캐스팅해서 사용한다.
    1. ex) JButton b = (JButton) e.getSource();
  10. button.addActionListener(MyActionListener); button.addKeyListener(MyKeyListener); button.addFocusListener(myFocusListener); button.addMouseListener(myMouseListener);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class MyListener implements ActionListener {

	@Override
	public void actionPerformed(ActionEvent e) {
		JButton btn = (JButton)e.getSource(); //버튼ㅇ
		btn.setText("마침내 버튼이 눌려졌습니다.");
	}
}
class MyFrame extends JFrame{
	private JButton button;
	
	public MyFrame() {
		setTitle("이벤트");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(new FlowLayout());
		
		button = new JButton("버튼을 누르시오.");
		button.addActionListener(new MyListener());
		add(button);
		setSize(300, 200);
		setVisible(true);
	}
}

public class ActionEventTest {
	public static void main(String[] args) {
		MyFrame f = new MyFrame();
	}
}

JAVA - Key Event

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class KeyListenerEx extends JFrame {
	
	private JLabel [] keyMessage;
	
	public KeyListenerEx() {
		setTitle("keyListener 예제");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container c = getContentPane();
		c.setLayout(new FlowLayout());
		
		c.addKeyListener(new MyKeyListener());
		Font chiller = new Font("Chiller", Font.BOLD, 20);
		
		keyMessage = new JLabel[3];
		keyMessage[0] = new JLabel(" getKetCode() ");
		keyMessage[1] = new JLabel(" getKeyChar() ");
		keyMessage[2] = new JLabel(" getKeyText() ");
		
		for(int i = 0; i < keyMessage.length; i++) {
			c.add(keyMessage[i]);
			keyMessage[i].setFont(chiller);
			keyMessage[i].setOpaque(true);
			keyMessage[i].setBackground(Color.yellow);
		}
		
		setSize(300, 150);
		setVisible(true);
		
		c.setFocusable(true);
		c.requestFocus();
	}
	
	class MyKeyListener extends KeyAdapter {
		public void keyPressed(KeyEvent e) {
			int keyCode = e.getKeyCode();
			char keyChar = e.getKeyChar();
			
			keyMessage[0].setText(Integer.toString(keyCode));
			keyMessage[1].setText(Character.toString(keyChar));
			keyMessage[2].setText(e.getKeyText(keyCode));
		}
	}
	
	
	public static void main(String[] args) {
		new KeyListenerEx();
		
	}

}
This post is licensed under CC BY 4.0 by the author.