나는 자바 자신을 가르치려고 노력하고있다. 나는 오늘 너무 많이 연습했거나 그냥 바보 같은 순간을 보내고있다.MotionListener를 다른 클래스로 어떻게 분리합니까?
나는 페인트와 MouseMotionListener로 화면을 가로 질러 그래픽을 드래그 할 수 있고 별도의 클래스로 MouseMotionListener를 만들고 싶었다.
가 어떻게 별도의 클래스로 내 코드에서 수신기를 분리 할
: 질문에에? 다른 클래스에 넣으려고 할 때 순환 참조를 만들었습니다.
코드 :
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
@SuppressWarnings("serial")
class Class1 extends JFrame implements MouseMotionListener{
Point p,p2;
public Class1(){
p = new Point(0,0);
this.setSize(500,500);
//this.setUndecorated(true);
//this.setBackground(new Color(0.0f, 0.0f, 0.0f, 0.01f));
this.addMouseMotionListener(this);
this.setLocationRelativeTo(null);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[]args){
new Class1();
}
public void paint(Graphics g){
g.setColor(Color.gray);
g.fillRect(0, 0, 500, 500);
}
public void paintSquare(Graphics g){
g.fillRect(p.x, p.y, 50, 50);
}
public void paintCover(Graphics g){
g.setColor(Color.gray);
g.fillRect(p2.x, p2.y, 50, 50);
}
@Override
public void mouseDragged(MouseEvent e) {
p2=p;
p=e.getPoint();
p.translate(-25, -25);
paintCover(this.getGraphics());
paintSquare(this.getGraphics());
}
@Override
public void mouseMoved(MouseEvent e) {
//do nothing
}
}
** 많은 경우에서 귀하의 것과 같은 순환 참조가 있습니다. 프레임은 수신기 인스턴스를 "알"며, 수신기 인스턴스는 참조를 다시 가질 수 있습니다 프레임에. 그러나 어쨌든 : ** Component에서! getGraphics()를 호출하지 마라! 이 방법으로 그림을 그리는 것은 명백하게 ** 잘못된 ** 일입니다. 예를 들어, http://docs.oracle.com/javase/tutorial/uiswing/painting/을 참조하십시오. – Marco13
[페인팅 수행] (http://docs.oracle.com/javase/tutorial/uiswing/painting/)에서 회화 작업을 수행하는 방법을 확인하십시오. – MadProgrammer
두 자원 모두에게 감사드립니다. 정확히 내가 읽을 필요가 있었던 것. – Orion