2011-06-03 217 views
0

我試圖讓控制檯在類別RenderCanvas內的某個對象內按下鼠標時打印,其中extendsJPanel。但是,當我在窗口中按下鼠標時,我沒有得到任何反饋。任何建議,我可能會改變,使MouseListener工作?Java MouseListener不工作

這裏是我的代碼:

RenderCanvas類:

import java.awt.event.MouseEvent; 
import java.util.ArrayList; 
import java.util.List; 
import java.awt.Color; 
import java.awt.Graphics; 
import javax.swing.JPanel; 
import java.awt.event.MouseAdapter; 


public class RenderCanvas extends JPanel { 
    private List<Rect> rectangles = new ArrayList<Rect>(); 
    private List<Line> lines = new ArrayList<Line>(); 

    public void renderCanvas() { 
     addMouseListener(new MouseAdapter() { 
      public void mousePressed(MouseEvent e) { 
       addRect(0, 0, 200, 200, Color.ORANGE); 
       System.out.println(e); 
      } 
     }); 
    } 

    public void paintComponent(Graphics g) { 
     for (Rect rectangle : rectangles) { 
      rectangle.draw(g); 
     } 
     for (Line line : lines) { 
      line.draw(g); 
     } 
    } 

    public void addRect(int x, int y, int width, int height, Color color) { 
     Rect rectangle = new Rect(x, y, width, height, color); 
     this.rectangles.add(rectangle); 
    } 

    public void addLine(int y, int width, Color color) { 
     Line line = new Line(y, width, color); 
     this.lines.add(line); 
    } 
} 

主類:

import javax.swing.*; 
import java.awt.*; 
import java.util.Random; 

public class Main { 
    public static void main(String[] args) { 
     JFrame window = new JFrame("Window"); 
     RenderCanvas canvas = new RenderCanvas(); 
     window.setContentPane(canvas); 
     window.setSize(640, 360); 
     window.setLocation(640, 360); 
     window.setVisible(true); 
    } 
} 

在此先感謝您的幫助!

回答

2

public void renderCanvas()不是構造函數。改變

public void renderCanvas() 

public RenderCanvas() 

通知大寫 「R」 和不存在的 「空隙」 返回類型

+0

謝謝,修好了! – 2011-06-03 02:15:23

+1

僞構造函數的詛咒再次發生! – 2011-06-03 02:16:48

0

我想你打算這個方法:

public void renderCanvas() { 

是爲RenderCanvas類的構造函數;不過,這不是因爲兩個原因:它不是以相同的方式進行資本化(小r與大寫R),也有返回類型。構造函數沒有返回類型;該行應該是

public RenderCanvas() { 

因爲這不是一個構造函數,這是一個方法,而且沒有人調用它,所以永遠不會被添加事件處理程序。

1

void RenderCanvas()的不被調用。我相信你的意思只是public RenderCanvas()而不是public void RenderCanvas,因爲你只在主要方法中使用ctor。