Java-GUI(frame, component, event)

2 분 소요

GUI (graphical user interface)

  • 사용자가 편리하게 입출력을 할 수 있도록 그래픽으로 화면을 구성하고 마우스나 키보드로 입력받을 수 있또록 지원하는 사용자 인터페이스
  • 종류는 2가지 - AWT, SWING

AWT

  • 운영체제가 제공하는 자원을 이용해서 컴포넌트를 생성 중량 컴포넌트
  • AWT 컴포넌트의 그리기는 운영체제에 의해 이루어지며, 운영체제의 자원을 많이 소모하고 부담을 줌.
      import java.awt.FlowLayout;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
    

SWING

  • AWT기술을 기반으로 작성된 라이브러리
  • 자바로 작성되어 있기 때문에 어떤 플랫폼에서도 일관된 화면을 보여줄 수 있음. 이거를 경량 컴포넌트라고 부름.

  • 스윙컴포넌트는 운영체제의 도움을 받지않고 직접 그리기 때문에 운영체제에 부담을 주지않음.

  • 스윙 프로그램은 컴포넌트를 이용해서 조립하듯이 작성
      import javax.swing.JFrame;
      import javax.swing.JButton;
      import javax.swing.JLabel;
      import javax.swing.JTextField;
    

컨테이너

  • 다른 컴포넌트를 포함할 수 있는 GUI컴포넌트
  • 다른 컨테이너에 포함될 수 있음.
  • SWING 대표 컨테이너 : JFrame, JPanel, JDialog

컴포넌트

  • 컨테이너에 포함되어야만 화면에 출력할 수 있는 GUI객체
  • 다른 컴포넌트를 포함할 수 없는 순수 컴포넌트
      import javax.swing.JButton;
      import javax.swing.JFrame;
      import javax.swing.JLabel;
      import javax.swing.JPanel;
      import javax.swing.JTextField;
        
      class MyFrame2 extends JFrame {
              public MyFrame2() {
                      //패널생성 : 컴포넌트를 담을 수 있는 컨테이너
                      JPanel jp = new JPanel();
                      //레이블 : 편집이 불가능한 텍스트
                      JLabel label = new JLabel("안뇽");
                      //버튼 : 사용자가 클릭했을 경우, 이벤트를 발생하여 원하는 동작을 하게하는데 이용
                      JButton btn = new JButton("첫버튼임");
                      JButton btn1 = new JButton("두번째 버튼임");
                      JButton btn2 = new JButton("세번째 버튼임");
                      //텍스트 필드 : 입력이 가능한 한 줄의 텍스트 창
                      JTextField jf1 =new JTextField(10); // 10개 문자열 가능
                      JTextField jf2 =new JTextField(20); // 20개 문자열 가능
                       
                      // 프레임에 패널 추가
                      add(jp);  
                      //패널에 컴포넌트 추가
                      jp.add(label);
                      jp.add(btn);
                      jp.add(btn1);
                      jp.add(btn2);
                      jp.add(jf1);
                      jp.add(jf2);
        
                      //입력가능 여부
                      jf2.setEditable(false);
                        
                      //Frame 셋팅 메소드 호출
                      setTitle("MyFrameTest");
                      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//끌때옵션
                      setResizable(true);//리사이즈
                      setSize(500,400);//사이즈
                      setVisible(true);
              }
      }
      public class ComponentTest2 {
              public static void main(String[] args) {
                      new MyFrame2();
              }
      }
    

최상위 컨테이너

  • 다른 컨테이너에 포함되지 않고도 화면에 출력되며, 독립적으로 존재 가능한 컨테이너
  • 스스로 화면에 자신을 출력하는 컨테이너 : JFrame, JDialog

JFrame

  • 모든 스윙컴포넌트를 담는 최상위 컨테이너
  • 컴포넌트를 화면에 보이려면 스윙 프레임에 부착되어야함.

이벤트 - 구동프로그래밍

  • 마우스 버튼 클릭, 더블클릭, 마우스 이동 등과 같은 “이벤트”에 응답하는 형태로 작성하는 프로그래밍

  • 이벤트 처리과정
    1. 이벤트를 발생하는 컴포넌트 작성
    2. 이벤트 리스너 를 작성
    3. 이벤트 리스너를 컴포넌트에 등록
    4. 컴포넌트의 동작으로 이벤트발생!
  • 이벤트리스너의 위치
    1. 별도의 클래스를 이벤트 리스너로 작성하는 경우
        class MyFrame1 extends JFrame{
        }
        class MyListener1 implements ActionListener {
           @Override
           public void actionPerformed(ActionEvent e) {
                   // TODO Auto-generated method stub
                   System.out.println("이벤트 발생!");
           }
        }
        public class MyFrameTest {
           public static void main(String[] args) {
                   new MyFrame1(); 
           }
        }
      
    2. 프레임클래스가 ActionListener인터페이스를 상속받아 구현하게 하는 경우
      • 이러면 강제적으로 프레임 클래스안에 구현메소드를 꼭 만들어야함.
          class MyFrame2 extends JFrame implements ActionListener{
          public MyFrame2() {
                    
          }
          @Override
          public void actionPerformed(ActionEvent e) {
                  // TODO Auto-generated method stub
          }
          }
        
    3. 익명클래스로 선언 후 생성을 해버리기
      • 프레임 클래스는 JFrame만 상속받고 (인터페이스는 상속 x)
          class MyFrame7 extends JFrame  {
          public MyFrame2() {
                    
          }
          btn.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
                    
          }
         });
          }
        
  • 이벤트객체 사용하기
    • 해당 이벤트가 발생하면 그 이벤트에 대한 정보를 이벤트 객체로 넘겨받음.
         public void actionPerformed(ActionEvent e) {
                   //System.out.println(e.getActionCommand());
                   //System.out.println(e.getSource());
                   //System.out.println(e.getID());
                   if(e.getSource()==btnYellow) {
                           panel.setBackground(Color.yellow);
                   } else if(e.getSource()==btnRed){
                           panel.setBackground(Color.red);
                   }
           }  // 구현해야만하는 추상메소드만 써놓은거
      

카테고리:

업데이트:

댓글남기기