티스토리 뷰

반응형

 

 


안녕하세요,
배곧동개발자 입니다.

 

제가 맨날 하는 C# 말고, 자바를 이용해서 윈도우폼을 짠다면? swing이라는거로 짤 수 있습니다-

 

swing은 대학교 때에 슬적 건드려본 기억이 있기에, 간만에 하려니 생소할줄 알았으나 다행히 C#이랑 크게 다를바 없네요.

 

drag하여 폼을 쉽게 만들던걸 하나하나 직접 선언하고 정의해야 한다는 정도?! 껌이지!

 

 

 

 

여튼! 가볍게 키 이벤트를 받아서 움직이는 패널을 하나 만들어볼까합니다.

 

// 메인이 될 폼(프레임)
JFrame temp = new JFrame();
// 프레임 사이즈
temp.setSize(300, 300);
// 보여준다! (이게 왜 기본 true가 아니지?)
temp.setVisible(true);
// 자식 컨트롤러들 정렬이라는데.. 난 자유로우니 일단 null
temp.setLayout(null);


이렇게 폼을 선언해주고 거기에 패널을 하나 만들어줄꺼에요-

 

 

// 움직이게 될 패널 선언
JPanel panel = new JPanel();
// 위치와 크기를 한번에 설정하는 bounds
panel.setBounds(10, 10, 70, 70);
// 패널의 색깔
panel.setBackground(Color.black);
// 왜 이게 디폴트가 아니냐고!
panel.setVisible(true);
반응형



그리고 이거는 써비스- 패널 안에 들어갈 레이블 하나 만들어줄까해요!

// 레이블(문구) 선언
JLabel lbl = new JLabel();
// 최초 문구는 준비이!!
lbl.setText("준비!");
// 색깔은 흰색! 패널이 검정이니까 보색이지!
lbl.setForeground(Color.white);
// 위에 만들어놓은 패널에 넣어준다
panel.add(lbl);

 


이렇게 하면 등장인물들은 모두 만들었습니다.

 

​​

//만든 패널을 폼에 넣어준다
temp.add(panel);



아, 이거까지 넣어서 폼에 패널을 넣어줬어요. 이러면 어떻게 되냐?

 

 

 


이렇게 되지요- 딱 예상했던대로 되었지요?

 

 

폼을 만들었고 > 패널을 만들었으며 > 레이블을 만들어서 > 레이블을 패널에 넣고 > 패널을 폼에 넣는다.




자 이제 이 패널을 움직여줄껀데요- 폼 전체에 이벤트를 줄껍니다. 방향키를 눌렀을 때에 움직이는 이벤트!

각각의 객체에 이벤트를 입혀줄 때에는 아래와같은 방식으로 입혀주는데요-


객체.add이벤트리스너(new 이벤트리스너() {
    // 대부분 자동완성! (기존 이벤트 오버라이드)
});



자동완성이 편하기는한데, 쓸대없는것까지 오버라이드 되어버리니 쓰잘대기없는 코드가 늘어나는 느낌이 드네요.

여튼, 폼에다가 키입력하는 이벤트를 줘봅시다!

 

// 폼에 addKeyListener를 통해서 키 이벤트를 생성
temp.addKeyListener(new KeyListener() {
   // 키가 입력되었을 때에 이벤트이므로 이 친구에 작성!
   @Override
   public void keyPressed(KeyEvent e) {
      // 키 코드를 받아온다. 37:왼쪽 / 39:오른쪽 / 38:위쪽 / 40: 아래쪽
      // 이거 모르겠으면 syso 찍어보자!
      int code = e.getKeyCode();
      // 패널의 위치를 바꿔줘야하니까, 현재 위치를 불러옴
      Point p = panel.getLocation();
      if(code == 40){
         // 코드 40일때, 즉 아래쪽키 눌렀을 때에 위치 및 문구 수정
         panel.setLocation(p.x,p.y+10);
         lbl.setText("아래로~");
      }else if(code == 39){
         // 코드 39일때, 즉 오른쪽키 눌렀을 때에 위치 및 문구 수정
         panel.setLocation(p.x+10,p.y);
         lbl.setText("오른쪽~");
      }else if(code == 37){
         // 코드 37일때, 즉 왼쪽키 눌렀을 때에 위치 및 문구 수정
         panel.setLocation(p.x-10,p.y);
         lbl.setText("왼쪽~");
      }else if(code == 38){
         // 코드 38일때, 즉 위쪽키 눌렀을 때에 위치 및 문구 수정
         panel.setLocation(p.x,p.y-10);
         lbl.setText("위로~");
      }
   }
   // 이 아래 코드들은 삭제하고싶다.
   @Override
   public void keyTyped(KeyEvent e) {}
   @Override
   public void keyReleased(KeyEvent e) {}
});

​ ​

이벤트 주는 방법 좀 이해 가시나요? 

 

제가 제이쿼리 하기 전이였다면 이거 이벤트주는 방식 이해 잘 안갔을거같은데, 약간 풀어서 설명하자면

// Step1. temp에 키 이벤트로 "리스너함수"를 실행한다고 지정
temp.addKeyListener(리스너함수);

// Step2. 리스너함수란 다른게 아니고 새로운 리스너 함수를 만들꺼야
temp.addKeyListener ( new KeyListener(){ 내용 } );

// Step3. 그 새로운 리스너 함수란 말이지~ 내용을 채워주는거지!
temp.addKeyListener ( new KeyListener(){
   public void keyPressed(KeyEvent e){
      //내용 내용 내용
   }
} );



어떠신가요? 

복잡해보이는 패턴이긴한데 저렇게 하나하나 뜯어보면 결국 이벤트를 생성할 때에 실행함수를 그 자리에서 새로 만들기 때문에 저렇게 복잡해 보이는것일 뿐이랍니다.

이해하고 넘어간다면 안헷갈리실거에요-

 

아, 여튼 그래서 저렇게 코드를 입히면 어떻게 되냐고요?

 




이렇게 방정맞은 프로그램이 탄생하게 되지요-

 

 

제가 진행중인 "작은프로젝트"에 스윙 이용도 몇가지 진행해볼까 해서 슬쩍 알아보고 적어봤는데, 이해하기 어렵진 않으셨죠?

 

주석 나름 열심히 달았습니다- 혹 이해 안되는 부분 있으면 댓글 달아주세요!


이만,
배곧동개발자 였습니다.

 

 




반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday