2011-06-03 219 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。