Java MouseListener не работает - PullRequest
0 голосов
/ 03 июня 2011

Я пытаюсь заставить консоль печатать при нажатии мыши внутри объекта класса RenderCanvas, который extends JPanel. Тем не менее, я не получаю обратной связи, когда я нажимаю кнопку мыши в окне. Любые предложения относительно того, что я мог бы изменить, чтобы заставить 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 ]

2 голосов
/ 03 июня 2011

public void renderCanvas() НЕ является конструктором. Изменение

public void renderCanvas()

до

public RenderCanvas()

Обратите внимание на прописные буквы "R" и отсутствие типа возврата "void"

1 голос
/ 03 июня 2011

void RenderCanvas() не вызывается.Я полагаю, что вы имеете в виду просто public RenderCanvas() вместо public void RenderCanvas, поскольку вы используете только ctor в основном методе.

0 голосов
/ 03 июня 2011

Я думаю, вы намереваетесь использовать этот метод:

public void renderCanvas() {

в качестве конструктора для класса RenderCanvas;однако это не по двум причинам: оно не пишется заглавными буквами (small r vs capital R), а также имеет тип возврата.Конструкторы не имеют возвращаемого типа;строка должна выглядеть так:

public RenderCanvas() {

Поскольку это не конструктор, это метод, и никто его не вызывает, поэтому ваш обработчик событий никогда не добавляется.

...