Christmas Pikachu 마우스 리스너 (어댑터 활용)
개발일지/자바

마우스 리스너 (어댑터 활용)

ZI_CO 2022. 9. 17.

MouseAdapter 사용법 


 * 1. 클래스 내에서만 사용하기때문 private를 사용하여 내부클래스를 만들어준다.
 * 2. MouseAdapter라는 추상클래스를 상속받아준다   (추상클래스, 인터페이스는 객체 생성(new) 를 할수가없다)
 * 3. 내부클래스에 추상클래스를 상속을 받아준다(내부클래스는 new 가능)

       이제는 new해서 MouseAdapter(추상클래스 new안됨)에 접근이 가능하다
 * 4. MouseAdapter는 MouseListener인터페이스를 구현하고있다. 그러기때문에 MouseListener까지 접근가능
 * 5. 일반 내부클래스인 MyMouseListener를 new를 해줘서 오버라이드를 해준다.
 * 6. 그럼 MouseListener인터페이스에서 원하는 기능만 오버라이드를 해줄수가 있다.

 

 

 

package blogpractice;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class MouseAd extends JFrame{
	
	JLabel label;
	final int LABEL_WIDTH = 100;
	final int LABEL_HEIGHT = 100;
	int xPoint = 100;
	int yPoint = 100;
	
	
	
	public MouseAd() {
		initData();
		setInitLayout();
		addEventListener();
	}

	private void initData() {
		setTitle("마우스리스너 어댑터 사용법");
		setSize(500, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		label = new JLabel("라벨");
	}
	
	private void setInitLayout() {
		setVisible(true);
		setResizable(false); // 프레임 사이즈 수정 불가
		setLayout(null);
		
		label.setBounds(xPoint, yPoint, LABEL_WIDTH, LABEL_HEIGHT);
		add(label);
	}
	
	// 
	private void addEventListener() {
		this.addMouseListener(new MyMouseListener());
	}

	// 마우스 리스너를 사용하게되면 추상메소드가 일반 메소드로 재정의를 해서 사용하게된다. 그치만 모든 추상메소드를 강제로 사용을 해야한다. 
	// 불필요한 코드를 써야 한다는 의미인것이다. 
	// 원하는 기능만 사용하려면 MouseAdapter를 사용하면 원하는 기능 골라서 오버라이드을 해줄수가 있다.
	// 방법 
	/*
	 * 1. 클래스 내에서만 사용하기때문 private를 사용하여 내부클래스를 만들어준다.
	 * 2. MouseAdapter라는 추상클래스를 상속받아준다   (추상클래스, 인터페이스는 객체 생성(new) 를 할수가없다)
	 * 3. 내부클래스에 추상클래스를 상속을 받아준다. 이제는 new해서 MouseAdapter에 접근이 가능하다
	 * 4. MouseAdapter는 MouseListener인터페이스를 구현하고있다. 그러기때문에 MouseListener까지 접근가능
	 * 5. 일반 내부클래스인 MyMouseListener를 new를 해줘서 오버라이드를 해준다.
	 * 6. 그럼 MouseListener인터페이스에서 원하는 기능만 오버라이드를 해줄수가 있다.
	 */
	private class MyMouseListener extends MouseAdapter {
		@Override
		public void mouseClicked(MouseEvent e) {
			int x = e.getX();
			int y = e.getY();
			label.setLocation(x , y - (label.getBounds().height));
			System.out.println("x좌표 : " + x);
			System.out.println("y좌표 : " + y);
			
		}
		
		@Override
		public void mouseEntered(MouseEvent e) {
			System.out.println("마우스가 프레임 안으로 이동");
		}
	}
	
	public static void main(String[] args) {
		
		new MouseAd();
		
	}
	
}

댓글