복전생의 눈물나는 복습공부
SWING MouseListener에 대해 알아보자.
import javax.swing.JFrame;
public class MouseAndKeyboard extends JFrame {//생성자
MouseAndKeyboard(){
setTitle("Mouse and Keyboard");
setSize(300,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new MouseAndKeyboard();//일꾼 생성!
}
}
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
class MouseAndKeyboardPanel extends JPanel{
JLabel text;
MouseAndKeyboardPanel(){
text = new JLabel("Mouse Test");
add(text);
}
}
public class MouseAndKeyboard extends JFrame {
MouseAndKeyboard(){
setTitle("Mouse and Keyboard");
setSize(300,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(new MouseAndKeyboardPanel());
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new MouseAndKeyboard();
}
}
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
class MouseAndKeyboardPanel extends JPanel{
JLabel text;
MouseAndKeyboardPanel(){
text = new JLabel("Mouse Test");
text.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("click!");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("press!");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("release!");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("enter!");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("exit!");
}
});
add(text);
}
}
public class MouseAndKeyboard extends JFrame {
MouseAndKeyboard(){
setTitle("Mouse and Keyboard");
setSize(300,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(new MouseAndKeyboardPanel());
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new MouseAndKeyboard();
}
}
//click은 한 자리에서! press와 release는 드래그하고 떼어냈을 때 해당한다.
//해당 코드는 컴포넌트에만 작동한다.
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
class MouseAndKeyboardPanel extends JPanel{
JLabel text;
MouseAndKeyboardPanel(){
text = new JLabel("Mouse Test");
add(text);
this.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("click!");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("press!");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("release!");
}
@Override
public void mouseEntered(MouseEvent e) {
setBackground(Color.DARK_GRAY);
}
@Override
public void mouseExited(MouseEvent e) {
setBackground(Color.RED);
}
});
add(text);
}
}
public class MouseAndKeyboard extends JFrame {
MouseAndKeyboard(){
setTitle("Mouse and Keyboard");
setSize(300,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(new MouseAndKeyboardPanel());
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new MouseAndKeyboard();
}
}
내용을 입력하세요.
//사실은 패널이라는 변수가 필요하다.
JPanel p = this;
p.setBackground(Color.DARK_GRAY);
//무명클래스 속 로컬변수는 접근 가능하다. 단 final변수처럼 만들면서 값을 주고, 변하지 않아야 한다.
이렇게 되면 코드가 복잡해진다. 패널이 모든 것을 해결하고 있는데,
무명클래스 말고 패널 전체가 마우스리스너를 구현하게 해보자.
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
class MouseAndKeyboardPanel extends JPanel implements MouseListener{
JLabel text;
MouseAndKeyboardPanel(){
text = new JLabel("Mouse Test");
add(text);
this.addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("click!");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("press!");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("release!");
}
@Override
public void mouseEntered(MouseEvent e) {
p.setBackground(Color.DARK_GRAY);
}
@Override
public void mouseExited(MouseEvent e) {
setBackground(Color.RED);
}
}
public class MouseAndKeyboard extends JFrame {
MouseAndKeyboard(){
setTitle("Mouse and Keyboard");
setSize(300,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(new MouseAndKeyboardPanel());
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new MouseAndKeyboard();
}
}
내용을 입력하세요.
//가독성을 위해 기존 함수들을 멤버 변수로 넣었다.
//마우스를 눌렀을 시 이벤트 분배기가 자동으로 호출한다. 그리고 호출 시 갖고 있는 정보를 이벤트 객체에 넣어준다.
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
class MouseAndKeyboardPanel extends JPanel implements MouseListener{
JLabel text;
MouseAndKeyboardPanel(){
text = new JLabel("Mouse Test");
add(text);
this.addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
int x = e.getX();//integer
int y = e.getY();
text.setText("Mouse is Pressed at ("+x+","+y+")");
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
setBackground(Color.DARK_GRAY);
}
@Override
public void mouseExited(MouseEvent e) {
setBackground(Color.RED);
}
}
public class MouseAndKeyboard extends JFrame {
MouseAndKeyboard(){
setTitle("Mouse and Keyboard");
setSize(300,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(new MouseAndKeyboardPanel());
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new MouseAndKeyboard();
}
}
//다른 것도 마찬가지로 액션이 수행된 좌표를 구할 수 있다.
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
class MouseAndKeyboardPanel extends JPanel implements MouseListener{
JLabel text;
MouseAndKeyboardPanel(){
text = new JLabel("Mouse Test");
add(text);
this.addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
int x = e.getX();//integer
int y = e.getY();
int b = e.getButton();//어느 마우스 버튼이 눌렸냐
text.setText("Mouse "+b+ " is Pressed at ("+x+","+y+")");
}
@Override
public void mouseReleased(MouseEvent e) {
int x = e.getX();//integer
int y = e.getY();
int b = e.getButton();//어느 마우스 버튼이 눌렸냐
text.setText("Mouse "+b+ " is Released at ("+x+","+y+")");
}
@Override
public void mouseEntered(MouseEvent e) {
setBackground(Color.DARK_GRAY);
}
@Override
public void mouseExited(MouseEvent e) {
setBackground(Color.RED);
}
}
public class MouseAndKeyboard extends JFrame {
MouseAndKeyboard(){
setTitle("Mouse and Keyboard");
setSize(300,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(new MouseAndKeyboardPanel());
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new MouseAndKeyboard();
}
}
if( b == MouseEvent.BUTTON1) {//left
text.setText("Mouse "+b+ " is Pressed at ("+x+","+y+")");
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("click count" +e.getClickCount());
}
//짧은 인터벌로 계속 클릭하면 카운트가 계속 늘어난다!
//애초에 컴포넌트의 위치는 Layout manager가, Frame은 Boarder Layout Manager, Panel은 Flow Layout이 정해준다.
//컴포넌트의 위치를 바꾸려면, 디폴트로 있는 Layout Manager를 해고시키고, 내가 지정해야 한다!
this.setLayout(new FlowLayout());//이게 기본값
this.setLayout(null);//해고시킴
//위치를 지정하려면 사이즈도 정해주어야 한다! 좌표 기준은 컴포넌트 왼쪽 위 모서리 꼭지점 부분!
text.setLocation(100, 100);
text.setSize(50,20);
코드를 짜보자!
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
class MouseAndKeyboardPanel extends JPanel implements MouseListener{
JLabel text;
MouseAndKeyboardPanel(){
this.setLayout(null);
text = new JLabel("Text");
add(text);
text.setLocation(100, 100);
text.setSize(50,20);
this.addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("click count" +e.getClickCount());
if(e.getButton()==MouseEvent.BUTTON1) {
text.setLocation(e.getX(), e.getY());
}
}
@Override
public void mousePressed(MouseEvent e) {
int x = e.getX();//integer
int y = e.getY();
int b = e.getButton();//어느 마우스 버튼이 눌렸냐
if( b == MouseEvent.BUTTON1) {//left
System.out.println("Mouse "+b+ " is Pressed at ("+x+","+y+")");
}
}
@Override
public void mouseReleased(MouseEvent e) {
int x = e.getX();//integer
int y = e.getY();
int b = e.getButton();//어느 마우스 버튼이 눌렸냐
System.out.println("Mouse "+b+ " is Released at ("+x+","+y+")");
}
@Override
public void mouseEntered(MouseEvent e) {
setBackground(Color.DARK_GRAY);
}
@Override
public void mouseExited(MouseEvent e) {
setBackground(Color.RED);
}
}
public class MouseAndKeyboard extends JFrame {
MouseAndKeyboard(){
setTitle("Mouse and Keyboard");
setSize(300,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(new MouseAndKeyboardPanel());
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new MouseAndKeyboard();
}
}
//클릭 하자마자 위치를 옮길지, 클릭하고 떼어낼 때 옮길 지 지정해주면 된다!
=> 별도의 이벤트 리스너가 있어야 한다.
MouseMotionListener(this);
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
class MouseAndKeyboardPanel extends JPanel implements MouseListener, MouseMotionListener{
JLabel text;
MouseAndKeyboardPanel(){
this.setLayout(null);
text = new JLabel("Text");
add(text);
text.setLocation(100, 100);
text.setSize(50,20);
addMouseListener(this);
addMouseMotionListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("click count" +e.getClickCount());
if(e.getButton()==MouseEvent.BUTTON1) {
text.setLocation(e.getX(), e.getY());
}
}
@Override
public void mousePressed(MouseEvent e) {
int x = e.getX();//integer
int y = e.getY();
int b = e.getButton();//어느 마우스 버튼이 눌렸냐
if( b == MouseEvent.BUTTON1) {//left
System.out.println("Mouse "+b+ " is Pressed at ("+x+","+y+")");
}
}
@Override
public void mouseReleased(MouseEvent e) {
int x = e.getX();//integer
int y = e.getY();
int b = e.getButton();//어느 마우스 버튼이 눌렸냐
System.out.println("Mouse "+b+ " is Released at ("+x+","+y+")");
}
@Override
public void mouseEntered(MouseEvent e) {
setBackground(Color.DARK_GRAY);
}
@Override
public void mouseExited(MouseEvent e) {
setBackground(Color.RED);
}
@Override
public void mouseDragged(MouseEvent e) {
System.out.println("DRAGGED"+e.getX() + "," +e.getY());
}
@Override
public void mouseMoved(MouseEvent e) {
System.out.println("MOVED"+e.getX() + "," +e.getY());
}
}
public class MouseAndKeyboard extends JFrame {
MouseAndKeyboard(){
setTitle("Mouse and Keyboard");
setSize(300,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(new MouseAndKeyboardPanel());
setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new MouseAndKeyboard();
}
}
//드래깅해서 움직일 때마다 호출된다!