我想教自己的Java和我已經被難倒了。我今天練習得太多了,或者我只是有一個愚蠢的時刻。我將如何將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
}
}
你** **(在許多情況下,比如你的)有一個循環引用:框架將「知道」監聽器實例,並且監聽器實例可能有一個參考返回到框架。但是,在任何情況下:不要**在組件上調用'getGraphics()'!這樣繪畫顯然是錯誤的**。例如,請參閱http://docs.oracle.com/javase/tutorial/uiswing/painting/獲取簡介。 – Marco13
看看[執行自定義繪畫](http://docs.oracle.com/javase/tutorial/uiswing/painting/),看看應該如何完成繪畫... – MadProgrammer
謝謝你們的資源。確切地說,我需要閱讀。 – Orion