Java MouseListener不起作用

时间:2011-06-03 02:06:54

标签: java swing mouseevent jpanel mouselistener

我想在RenderCanvas extendsJPanel的对象中按下鼠标时让控制台打印出来。但是,当我在窗口中按下鼠标时,我没有收到任何反馈。有关我可以更改以使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);
    }
}

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

public void renderCanvas()不是构造函数。变化

public void renderCanvas()

public RenderCanvas()

注意大写“R”并且没有“void”返回类型

答案 1 :(得分:1)

void RenderCanvas()未被调用。我认为您的意思是public RenderCanvas()而不是public void RenderCanvas,因为您只在主要方法中使用了ctor。

答案 2 :(得分:0)

我认为你打算采用这种方法:

public void renderCanvas() {

是RenderCanvas类的构造函数;但是,它不是出于两个原因:它没有以相同的方式大写(小r与大写R),也有返回类型。构造函数没有返回类型;该行应该看起来像

public RenderCanvas() {

因为这不是构造函数,所以它是一个方法,没有人调用它,所以永远不会添加事件处理程序。