이제 키보드를 했으니 마우스를 해보자.
마우스는 생각보다도 다양한 종류의 이벤트가 존재한다. 마우스는 이벤트 리스너만 총 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 |