자바(Java) - 프레임(Frame)의 마우스 이벤트 기본 예제

안녕하세요

이번 시간에는 자바 프레임(Frame)에서 마우스 이벤트를 활용하는 간단한 예제를 올릴까 합니다.

***********************************************
이벤트 소스 : Frame
이벤트 : MouseEvent
이벤트 핸들러 : MouseListener를 상속받는다.
************************************************



보시다시피 창 화면에 마우스 왼쪽 버튼을 누르면 타이틀에 클릭한 x,y 좌표의 위치가 출력되고 '나를 클릭해보세요' 멘트가 이동합니다.

또한 오른쪽 마우스 버튼을 누르면 Open(O), Save(S) 라는 팝업 메뉴가 뜹니다.

자 그럼 소스코드를 볼까요~

package testtest;

import java.awt.*;
import java.awt.event.*;

//MouseListener는 인터페이스고 추상메소드가 5개이기 때문에, 5개 메소드를 다 구현해야한다.
public class test extends Frame implements MouseListener {

String str="나를 클릭해보세요";
int x=50,y=50;
PopupMenu pm;
MenuItem mi1, mi2;

public test(){
super("::MouseE::");
//팝업메뉴 생성 및 부착
pm=new PopupMenu();
add(pm); //add해도 나타나지 않는다. show()해야 나타남

mi1=new MenuItem("Open(O)"); mi2=new MenuItem("Save(S)");
pm.add(mi1); pm.addSeparator(); pm.add(mi2);

//마우스 이벤트 리스너 부착
this.addMouseListener(this);

}

// MouseListener 5개 추상메소드 구현

public void mouseEntered(MouseEvent e){}

public void mouseExited(MouseEvent e){}

public void mouseClicked(MouseEvent e){
//마우스 오른 버튼을 누를때만 팝업메뉴가 뜨도록 처리
if(e.getButton()==MouseEvent.BUTTON3){
pm.show(this, e.getX(), e.getY());
}

}

//Press->Release->Click //반응속도가 제일 빠른 Press
public void mousePressed(MouseEvent e){
x=e.getX(); y=e.getY();
setTitle("x :"+ x +" y : " + y);
repaint();
//paint()메소드는 우리가 호출할 수 없고, JVM이 호출해준다.
//우리는 repaint()를 호출함으로써 JVM이 paint()를 호출하도록 유도할 수 있다.
}

public void mouseReleased(MouseEvent e){}

@Override
public void paint(Graphics g){
g.setColor(Color.BLUE);
g.drawString(str, x, y);
}

public static void main(String[] args) {
test my = new test();
my.setSize(400,400);
my.setVisible(true);

}
}

댓글 없음:

댓글 쓰기