스윙 - 마우스 (액 션)
이 글 을 다 읽 으 면 다음 과 같은 지식 을 배 울 수 있 습 니 다.
(1) JAVASWING 에서 마우스 감청 에 자주 사용 되 는 감청 기 는 Mouse Listener, Mouse Wheel Listener, Mouse Motion Listener 를 포함한다.
(2) 마우스 모니터 의 역할 이 각각 무엇 인지, 마우스 가 어떤 조작 을 할 때 호출 된다.
(3) Mouse Listener 와 Mouse Adapter 의 차 이 는 Mouse Listener 가 아 닌 Mouse Adapter 를 사용 하 는 것 이 좋 습 니 다. 그러면 코드 가 비교적 깔끔 합 니 다.
(4) 사례 를 통 해 이러한 감청 을 더욱 이해한다.
사용자 가 마 우 스 를 클릭 할 때 세 개의 모니터 방법 을 호출 합 니 다.
A: 마우스 가 처음 눌 렸 을 때 mousePressed 를 호출 하고 마우스 가 풀 렸 을 때 mouseReleased 를 호출 하 며 마지막 으로 mouseClicked 를 호출 합 니 다.
B: 마우스 이벤트 클래스 의 대상 을 매개 변수 로 getX () 와 getY () 방법 을 호출 하면 마우스 가 눌 렸 을 때 마우스 포인터 가 x 와 y 좌표 에 있 는 것 을 얻 을 수 있 습 니 다.
C: 클릭, 더 블 클릭, 세 번 의 클릭 으로 구분 하려 면 getClickCount 방법 을 사용 해 야 합 니 다.주의해 야 할 것 은:
(1) 마 우 스 를 움 직 이 는 동시에 마 우 스 를 누 르 면 mouse Dragged 가 아 닌 mouse Moved 를 호출 합 니 다.마우스 가 한 구성 요소 내부 에 머 물 때 만 mouse Moved 방법 을 사용 할 수 있 습 니 다. 마우스 가 끌 면
구성 요소 밖으로 나 가면 mouse Dragged 방법 도 호출 됩 니 다.
(2) mouseEntered 와 mouseExited 방법 은 마우스 로 구성 요소 에 들 어가 거나 이동 할 때 호출 됩 니 다.
(3) 대부분 응용 프로그램 에서 마우스 클릭 에 관심 이 있 고 마우스 이동 에 관심 이 없 지만 마우스 이동 사건 이 발생 하 는 빈도 가 높 기 때문에 마우스 이동 사건 과 드래그 사건 은 따로 정의 된다.
Mouse Motion Listener 는 인터페이스 에 독립 되 어 있 습 니 다.
MouseListener VS MouseAdapter VS MouseWheelListener VS MouseMotionListener VS MouseMotionAdapter
(1) 위의 몇 가지 감청 에서 비교적 자주 사용 하 는 것 은 Mouse Listener 와 Mouse Motion Listener 이 고 Mouse Wheel Listener 는 비교적 적 게 사용한다.
(2) Mouse Adapter 는 Mouse Listener 를 확 장 했 습 니 다. Mouse Adapter 는 목적 성 이 강 합 니 다. Mouse Listener 의 모든 방법 이 필요 하지 않 을 때 Mouse Adapter 를 사용 하여 필요 한 것 을 선택 할 수 있 습 니 다.
어떤 것 이나 몇 가지 감청 으로 이 루어 지면 코드 가 더욱 간결 해 보이 고 코드 의 양 도 줄어든다.
(3) Mouse Motion Adapter 도 Mouse Motion Listener 를 확장 했다.
(4) Mouse Wheel Listener 는 마우스 휠 모니터 로 이 감청 을 사용 하지 않 는 다.
/ * * 마우스 리스터 인터페이스 에 마우스 방법 5 개 포함 * /
button.addMouseListener(new MouseListener(){
@Override
public void mouseClicked(MouseEvent e) {
/** ( ) 。**/
}
@Override
public void mouseEntered(MouseEvent e) {
/** 。**/
}
@Override
public void mouseExited(MouseEvent e) {
/** 。**/
}
@Override
public void mousePressed(MouseEvent e) {
/** 。**/
}
@Override
public void mouseReleased(MouseEvent e) {
/** 。**/
}}
);
/ * 추상 류 Mouse Adapter (재 작성 에 필요 한 방법 만) 감청 방법 을 자 유 롭 게 결정 할 수 있 음 * * /
button.addMouseListener(new MouseAdapter(){
/** mouseClicked **/
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
}
});
/ * 구성 요소 의 마우스 이동 사건 을 수신 하 는 디텍터 인터페이스.클릭 및 기타 마우스 이벤트 에 대해 서 는 MouseListener 를 사용 하 십시오. * * /
button.addMouseMotionListener(new MouseMotionListener(){
@Override
public void mouseDragged(MouseEvent e) {
/** 。**/
}
@Override
public void mouseMoved(MouseEvent e) {
/** 。**/
}
});
/ * 구성 요소 의 마우스 휠 이 벤트 를 수신 하 는 디텍터 인터페이스 입 니 다.클릭 과 다른 마우스 이벤트 에 대해 서 는 Mouse Listener 를 사용 하 십시오.마우스 이동 및 드래그 에 대해 서 는 Mouse MotionListener 를 사용 하 십시오. * * /
button.addMouseWheelListener(new MouseWheelListener(){
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
/** 。**/
}
});
마우스 감청 실례 는 다음 과 같다.
import java.awt.Cursor;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JFrame;
/**
*
* 、 、
* 1.
* 2.
* 3.
*/
public class TestMouseListener {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MouseFrame frame = new MouseFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class MouseFrame extends JFrame {
public MouseFrame() {
setTitle(" ");
setSize(300, 200);
MouseComponent component = new MouseComponent();
add(component);
}
}
class MouseComponent extends JComponent {
private static final int SIDELENG = 10;
private List<Rectangle2D> square;
private Rectangle2D current;
public MouseComponent() {
square = new ArrayList<Rectangle2D>();
current = null;
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
for (Rectangle2D r : square) {
g2.draw(r);
}
}
public Rectangle2D find(Point2D p) {
for (Rectangle2D r : square) {
if (r.contains(p))
return r;
}
return null;
}
public void add(Point2D p) {
double x = p.getX();
double y = p.getY();
current = new Rectangle2D.Double(x - SIDELENG / 2, y - SIDELENG / 2,
SIDELENG, SIDELENG);
square.add(current);
repaint();
}
public void remove(Rectangle2D s) {
if (s == null)
return;
if (s == current)
current = null;
square.remove(s);
repaint();
}
private class MouseHandler extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
current = find(e.getPoint());
if (current == null)
add(e.getPoint());
}
@Override
public void mouseClicked(MouseEvent e) {
current = find(e.getPoint());
if (current != null && e.getClickCount() >= 2)
remove(current);
}
}
private class MouseMotionHandler implements MouseMotionListener {
@Override
public void mouseMoved(MouseEvent e) {
if (find(e.getPoint()) == null)
setCursor(Cursor.getDefaultCursor());
else
setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
}
@Override
public void mouseDragged(MouseEvent e) {
if (current != null) {
int x = e.getX();
int y = e.getY();
current.setFrame(x - SIDELENG / 2, y - SIDELENG / 2, SIDELENG,SIDELENG);
repaint();
}
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.