목표 : 마우스 리스너를 작동해본다.
들어가기 전에...
아래의 내용들을 숙지하시고 진행해주세요
https://ondolroom.tistory.com/279
기본화면 만들기
WindowBuilder로 Gui화면을 켜본다.
아래처럼 JPanel을 하나 추가해준다.
그리고 레이아웃을 앱솔루트로 바꿔주자.
이미지 담기
소스코드페이지로 가보자.
이미지를 2개 가져와서 넣을 것이다.
위 2개의 이미지 객체를 생성할 것이다.
클래스 최상단의 빈공간을 이용하자.
새로운 inner클래스 JPanel 생성
JPanel을 상속받아서 새로운 패널 클래스를 만들 것이다.
메인 클래스 안에 inner클래스로 생성하자.
JPanel을 MyPanel로 변경
위에서 만들어둔 JPanel을 MyPanel로 바꾸어야 한다.
메인클래스 최상단에 MyPanel 레퍼런스를 생성하자.
JPanel 녀석을 MyPanel로 바꿔주자
결과
화면을 클릭하면 이미지가 번갈아 가며 출력된다.
번외
드래그는 addMouseMotionListener
더보기
package example;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
public class ThreadSwing1 {
private JFrame frame;
ImageIcon ic = new ImageIcon("img/pa.png"); // 이미지아이콘 객체 생성
Image img = ic.getImage(); // 이미지 객체 생성
int imgX = 50;
int imgY = 50;
MyPanel panel;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ThreadSwing1 window = new ThreadSwing1();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public ThreadSwing1() {
initialize();
}
class MyPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); // 캔버스 비우기
g.drawImage(img, imgX, imgY, this); // 이미지 그리기
}
public MyPanel() {
setFocusable(true); // 입력 포커스 받기
addMouseMotionListener(new MouseAdapter() { // 드래그는 모션리스너다
@Override
public void mouseDragged(MouseEvent e) {
imgX = e.getX(); // 마우스의 좌표를 받아서 이미지 좌표에 저장
imgY = e.getY();
repaint();
System.out.println(e.getX());
}
});
}
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new MyPanel();
frame.getContentPane().add(panel, BorderLayout.CENTER);
panel.setLayout(null);
}
}