Rath World Notes by Jang-Ho Hwang

29May/09Off

귀찮을 땐 reflection이 제 맛

아무리 IDE가 좋아졌다할지라도 라디오 버튼, 체크 박스, 콤보 박스, 텍스트 필드가 적절히 섞여 30여개의 입력 필드가 한 화면에 펼쳐져 있다면.. 유쾌하지 않다.

여기에 한 필드라도 고쳐지면 'Save' 버튼이 활성화되어야 하고 그렇지 않다면 비활성화 되어야 한다는 요구가 들어온다면?

htm_20040809011613070000070100-001.jpg

부들부들.

리플렉션의 이름으로 그대를 처단하겠다.


 1
 2   private void installModifyListeners() {
 3     ActionListener al = new ActionListener() {
 4       @Override
 5       public void actionPerformed(ActionEvent e) {
 6         fireModified("various buttons");
 7       }
 8     };
 9     KeyListener kl = new KeyAdapter() {
10       @Override
11       public void keyReleased(KeyEvent e) {
12         fireModified("various fields");
13       }
14     };
15     
16     Field[] fields = this.getClass().getDeclaredFields();
17     for(Field f : fields) {
18       try {
19         Object o = f.get(this);
20         if( o instanceof JComponent ) {          
21           try {
22             Method m = o.getClass().getMethod("addActionListener", ActionListener.class);
23             if( m!=null ) {
24               m.invoke(o, al);
25               continue;
26             }
27             
28           } catch( NoSuchMethodException e ) {}
29         }
30         
31         if( o instanceof JTextComponent ) {          
32           try {
33             Method m = o.getClass().getMethod("addKeyListener", KeyListener.class);
34             if( m!=null ) 
35               m.invoke(o, kl);
36           } catch( NoSuchMethodException e ) {}
37         }
38       } catch (Exception e) {
39         System.err.println(e);
40       }
41     }
42   }

이 글은 스프링노트에서 작성되고 살짝 고쳐졌습니다.

Posted by Jang-Ho Hwang

Comments (0) Trackbacks (0)

Sorry, the comment form is closed at this time.

Trackbacks are disabled.