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);
}
}
'Java' 카테고리의 다른 글
Java의 객체지향 (1) | 2023.03.22 |
---|---|
Java Basic (0) | 2023.03.22 |