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
- 이벤트 종류
- 이벤트 소스
- 화면 내 이벤트가 발생한 마우스 좌표 : getPoint(), getX(), getY()
- 컴포넌트 내 이벤트가 발생한 경우 버튼이나 메뉴 아이템의 문자열
- 클릭된 마우스 버튼 번호 : getButton()
- 마우스의 클릭횟수 : getClickCount()
- 키가 눌려졌다면 키의 코드 값과 문자 값
- 체크박스, 라디오 버튼에 이벤트가 발생하였다면 체크상태
- Object getSource() : 현재 발생한 이벤트의 소스 컴포넌트의 래퍼런스를 리턴한다. 반환타입이 Object이므로 캐스팅해서 사용한다.
- ex) JButton b = (JButton) e.getSource();
- 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.