Java

Java GUI

잘잔디 2023. 3. 22. 23:00

GuI Programming

컴포넌트 = GUI 기반 구성요소

일반 컴포넌트 : 버튼, 입력상자 …

Container 컴포넌트 : Frame , Panel

  • 한 윈도우에 Frame이 여러 개일 수는 없음
  • Pannel을 사용하여 이를 Window에 붙이는 개념으로 사용
  • 계층구조를 사용할 경우 아래로의 명령이 수월하게 이루어지기 때문에 Frame과 Pannel 간의 계층구조로 구현하도록 아이디어를 냈다고 함.

Event Programming

  • 이벤트(Event) : 실행도중에 사용자가 발생시키는 시그널
  • 언제,어디서, 몇 번 신호가 일어날지 CPU는 예측할 수 없기 때문
  • 신호는 전달되고 있으나, 그 신호가 왔을 때 처리해야 할 작업(코드)을 작성해놓지 않았기 때문에 반응이 없는 것이다.
  • 화면 클래스 안에 마우스 클래스를 생성한다. = Inner Class를 사용하여 Life Cycle을 수월하게 한다.

마우스 click Event 발생 시 원형 점을 찍는 예시

실행 예시

UML

코드

//Main 코드
package mycom.mytest;

public class Main {
    public static void main(String[] args) {
        MyFrame mf = new MyFrame();
    }
}
//MyFrame
package mycom.mytest;

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.LinkedList;

public class MyFrame extends Frame{

    public static final int FRAME_WIDTH = 800;
    public static final int FRAME_HEIGHT = 600;

    LinkedList<Myshape> arr = new LinkedList<Myshape>();

    public MyFrame() {
        super("이벤트 프로그램");
        this.addMouseListener(new MyHandler());//이벤트 처리기 등록
        //윈도우 창닫기 처리기 등록
        this.addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e) //WindowAdapter class Overriding
                { 
                    System.out.println("종료합니다     ");
                    System.exit(0); //프로그램 종료 하기
                }
           });

        this.setSize(MyFrame.FRAME_WIDTH,MyFrame.FRAME_HEIGHT);
        this.setVisible(true);
    }
    @Override
    public void paint(Graphics g) {
        for(Myshape s:arr) {
            s.display(g);
        }
    }

    //User로 부터 마우스 클릭이 일어날때 그리기 동작이 수행
    //클릭에 대한 Listener가 필요함.
    class MyHandler implements MouseListener{ // iner Class로 Life Cycle을 수월하게 한다.

        @Override
        public void mousePressed(MouseEvent e){
            arr.add(new Myshape(e.getX(),e.getY()));
            repaint();
        }
        @Override
        public void mouseClicked(MouseEvent e){;}
        @Override
        public void mouseReleased(MouseEvent e) {;}
        @Override
        public void mouseEntered(MouseEvent e){;}
        @Override
        public void mouseExited(MouseEvent e){;}

    }
}
//Myshape
package mycom.mytest;

import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;

public class Myshape {

    protected int x;
    protected int y;
    public static final int SHAPE_SIZE = 50;

    public Myshape() {
        Random rnd = new Random();
        this.x = rnd.nextInt(800);
        this.y = rnd.nextInt(600);
    }
    public Myshape(int x,int y) {
        this.x = x;
        this.y = y;
    }
    public void display(Graphics g) {
        g.setColor(Color.blue);
        g.fillOval(x, y, SHAPE_SIZE, SHAPE_SIZE);
    }

}