728x90

이제 키보드를 했으니 마우스를 해보자.

마우스는 생각보다도 다양한 종류의 이벤트가 존재한다. 마우스는 이벤트 리스너만 총 4가지가 존재한다.


MouseListener 시리즈


MouseListener : 일반적인 리스너 마우스가 특정 컴포넌트를 클릭,눌렀는지,땠는지,들어왔는지,나갔는지를 확인한다.

MouseMotionListener : Mouse가 드래그 됬는지, 움직였는지를 포착

MouseInputListener : MouseListener+MouseMotionListener

MouseWheelListener : Mouse의 휠이 움직였을때 발생하는 이벤트


아래의 예제를 보도록하자.


import java.awt.GridLayout;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.event.MouseInputListener;

public class TestSwing {
public static void main(String[] args) {
JFrame fr = new JFrame("This 프레임");
JPanel pn = new JPanel();
JButton[] bt = new JButton[4];

GridLayout gl = new GridLayout(2, 2);
pn.setLayout(gl);

for (int i = 0; i < bt.length; i++) {
bt[i] = new JButton("Button" + i);
if (i % 2 == 0) {
bt[i].addMouseListener(new MyMouseListener(i));
} else {
bt[i].addMouseMotionListener(new MyMouseListener(i));
}
pn.add(bt[i]);
}

pn.add(bt[0]);
pn.add(bt[1]);
pn.add(bt[2]);
pn.add(bt[3]);

fr.setContentPane(pn);

fr.setSize(400, 300);
fr.setVisible(true);
}
}

class MyMouseListener implements MouseInputListener {
private int btnNumber;

public MyMouseListener(int btnNumber) {
this.btnNumber = btnNumber;
}

@Override
public void mouseClicked(MouseEvent e) {
System.out.println(e.getSource().getClass().getName() + btnNumber);
System.out.println("Click Event");
System.out.println("Click Count : " + e.getClickCount());
System.out.println("Click Point : " + e.getPoint().toString());
}

@Override
public void mousePressed(MouseEvent e) {
System.out.println(e.getSource().getClass().getName() + btnNumber);
System.out.println("Click Pressed");
System.out.println("Click Count : " + e.getClickCount());
System.out.println("Click Point : " + e.getPoint().toString());

}

@Override
public void mouseReleased(MouseEvent e) {
System.out.println(e.getSource().getClass().getName() + btnNumber);
System.out.println("Click Released");
System.out.println("Click Count : " + e.getClickCount());
System.out.println("Click Point : " + e.getPoint().toString());

}

@Override
public void mouseEntered(MouseEvent e) {
System.out.println(e.getSource().getClass().getName() + btnNumber);
System.out.println("Click Entered");
System.out.println("Click Count : " + e.getClickCount());
System.out.println("Click Point : " + e.getPoint().toString());

}

@Override
public void mouseExited(MouseEvent e) {
System.out.println(e.getSource().getClass().getName() + btnNumber);
System.out.println("Click Exited");
System.out.println("Click Count : " + e.getClickCount());
System.out.println("Click Point : " + e.getPoint().toString());

}

@Override
public void mouseDragged(MouseEvent e) {
System.out.println(e.getSource().getClass().getName() + btnNumber);
System.out.println("Click Dragged");
System.out.println("Click Count : " + e.getClickCount());
System.out.println("Click Point : " + e.getPoint().toString());

}

@Override
public void mouseMoved(MouseEvent e) {
System.out.println(e.getSource().getClass().getName() + btnNumber);
System.out.println("Click Moved");
System.out.println("Click Count : " + e.getClickCount());
System.out.println("Click Point : " + e.getPoint().toString());

}

}


위의 예제는 MouseInputListener를 사용해서 MouseListener와 MouseMotionListener를 모두 구현한 모습이다.

보면 짝수번은 MouseListener를 받도록 하였다.

또한 홀수번은 MouseMotionListener를 받도록 하였다.

물론 둘다 받도록 할 수도 있다.

테스트 해보면 각각의 메소드가 무슨 역활을 하는지 쉽게 알 수 있을 것이다.


MouseInputListener 메소드


Clicked : 클릭했을때 발생 클릭을 할 수 없는 컴포넌트(레이블등)는 발생치 않음

Pressed : 눌렀을 때 발생

Released : 땠을때 발생

Entered : 특정 컴포넌트에 마우스가 들어가는 순간 발생

Exited : 특정 컴포넌트에 마우스가 나가는 순간 발생

Dragged : 특정 컴포넌트 내에서 드래그 하는 동안 내내 발생

Moved : 특정 컴포넌트 내에서 마우스가 드래그 하지 않고 움직이는 내내 발생


여기서 MoseEvent들의 메소드를 확인하여서 원하는 정보를 추가적으로 얻는 것이 가능하다.


MouseEvent 메소드


getClickCount : 몇번 클릭했는지 확인, 1초이상 안누르면 초기화됨, 이 메소드로 더블클릭 확인

getPoint : Point는 x,y좌표를 가진 객체이다. 마우스 포인터의 컴포넌트내의 위치를 x,y로 반환

getX : 위의 x좌표를 반환

getY : 위의 y좌표를 반화

 

더있지만 마우스 이벤트에서 쓰이는것은 이것정도이다. 더 필요하다면 찾아서 사용하라

'Programming > Java-Swing' 카테고리의 다른 글

[Swing-09]Event-Focus  (0) 2017.10.27
[Swing-08]Evnet-Item  (0) 2017.10.27
[Swing-06]Event-Key  (0) 2017.10.24
[Swing-05]Event-Action  (0) 2017.10.21
[Swing-04]Layout(배치관리자)  (0) 2017.10.20

+ Recent posts