본문 바로가기
IT/JAVA

[Java] java.awt.event

by 행복한 용용이 2020. 10. 1.
반응형

 

[java.awt.event] package

 

awt.event Class

ActionEvent - button , textfield

AdjustmentEvent - scrollbar

FocusEvent - Focus 얻었을때, 잃었을때 Event

ItemEvent - choice, checkbox, list에 add할 때

KeyEvent - 단축기, 키 누를때 마다의 Event

MouseEvevt - MousePointer가 어떤 component에 들어갔을 때(MouseEntered.exited)

                - MousePressed, Mousereleased

                - Mousemoved, Mousedragged

TextEvent - 어떤 Text에 대한 Event (낱말맞추기)

WindowEvent - 윈도우 창에서의 Event

awt.event Interfaces - Listener(감시자)

[구동순서]

Listener

행동을 취하면 2.event

EventSource

Component에서 1. 등록부에 Event Source가 될 수 있는 것을 EventListener 등록(감시자) : ~.add~Listener()

3. Event 발생

4. Logic(Method) : 반드시 해당 listener의 method override

[만드는 순서]

1. Event Source 결정 (button, checkbox,,,,)

2. Event 결정 (button이면 actionevent,,,,)

3. ~Listener구현 (actionListener) - implements 하고 Override함

4. 1을 Listener에 등록 (등록부에다)


ItemTest

 

1. Event Source 결정 : 8개

6개 checkbox

1개 choice

1개 button


2. Event 결정

checkbox는 ItemEvent

choice는 ItemEvent

button은 ActionEvent


3. ItemListener,ActionListener 구현 (implements, 추상메소드 Override)

cntl+1번 눌러서 error 보고

Add unimplemented method 하면

추상메소드 Override 됨


4. 1을 Listener에 등록 (등록부에)


5. Override 한 부분에 coding

 

   package com.kitri.awt.event;

 

 

   import java.awt.*;

   import java.awt.event.*;

 

 

   public class ItemTest extends Frame implements ItemListener,ActionListener{

         //선언부

         Panel pN = new Panel();

         Panel pS = new Panel();

 

         CheckboxGroup cbg = new CheckboxGroup();   //라디오버튼 1개만 선택됨

         Checkbox mor = new Checkbox("아침",cbg,true);

         Checkbox aft = new Checkbox("점심",cbg,false);

         Checkbox eve = new Checkbox("저녁",cbg,false);

 

         Checkbox app = new Checkbox("사과",true);   //체크박스 다중선택 가능

         Checkbox banana = new Checkbox("바나나",false);

         Checkbox straw = new Checkbox("딸기",false);

 

         TextArea ta = new TextArea();

 

         Choice ch = new Choice();

         Button exit = new Button("종료");

 

         public ItemTest() {

                  //배치부

                  super("아이템 테스트!!!");

 

                  pN.setLayout(new GridLayout(2,3,10,10));

                  pN.add(mor);

                  pN.add(aft);

                  pN.add(eve);

 

                  pN.add(app);

                  pN.add(banana);

                  pN.add(straw);

                 

                  pS.setLayout(new BorderLayout(10,0));

                  ch.add("아침");

                  ch.add("점심");

                  ch.add("저녁");

                  pS.add(ch,"Center");

                  pS.add(exit,"East");

 

                  setLayout(new BorderLayout(0,10));

 

                  add(pN,"North");

                  add(ta,"Center");

                  add(pS,"South");

  

                  setBounds(300, 200, 300, 500);

                  setVisible(true);   //여기까지 배치부

 

 

                  //구현부

                  //exit.addActionListener(new ItemTest());

                  //()안은 ActionListener의 객체를 넣는 자리

                  //하지만 ActionListener는 interface여서 객체 못넣음

                  //대신 implements하고 있는 ItemTest를 넣으면 되는데

                  //new 하면 계속 새로운것이 생겨서 무한복제

                  //따라서 this를 써야함.

 

                  exit.addActionListener(this);

                  mor.addItemListener(this);

                  aft.addItemListener(this);

                  eve.addItemListener(this);

                  app.addItemListener(this);

                  banana.addItemListener(this);

                  straw.addItemListener(this);

                  ch.addItemListener(this);

 

            }

 

            public static void main(String[] args) {

                  new ItemTest();

            }

 

 

            @Override

            public void actionPerformed(ActionEvent e) {

                  System.exit(0);

  

            }

 

 

            @Override

            public void itemStateChanged(ItemEvent e) {

               //eventsorce의 주체를 찾아냄

               Object ob = e.getSource();

               if (ob == ch) { // eventsource가 ch라면

                  String str = ch.getSelectedItem();

                  if (str.equals("아침")) {

                     mor.setState(true);

                  } else if(str.equals("점심")) {

                     aft.setState(true);

                  } else {

                     eve.setState(true);

                  }

               }

 

               Checkbox sel = cbg.getSelectedCheckbox();

               String selStr = sel.getLabel();

               System.out.println(selStr);     //아침,점심,저녁이 체크될때 마다 콘솔창에 뜸

 

 

               ta.setText("---"+selStr+"---\n");   //setText는 TextArea 전체를 바꾸는 것

               ta.append("1. 사과 : " + eat(app.getState())+"\n");

               ta.append("2. 바나나 : " + eat(banana.getState())+"\n");

               ta.append("3. 딸기 : " + eat(straw.getState())+"\n")//따라서 첫번째 것은 고정이니 setText하고 나머진 append로 더하기

 

               ch.select(selStr);

 

            }

 

            //사과,바나나,딸기 체크되어있으면 먹었다, 안먹었다 method

            private String eat(boolean flag) {

                  return flag ? "먹었다." : "안먹었다.";

            }

 

 

   }


결과

 

 

 

[출처] 빡쏘끼룩

반응형