جهاز MouseListener (Java/Swing) الخاص بي لا يستمع، ساعدني في معرفة السبب

StackOverflow https://stackoverflow.com/questions/33708

سؤال

لذلك لقد حصلت على JPanel تنفيذ MouseListener و MouseMotionListener:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class DisplayArea extends JPanel implements MouseListener, MouseMotionListener  {
    public DisplayArea(Rectangle bounds, Display display) {
        setLayout(null);
        setBounds(bounds);
        setOpaque(false);
        setPreferredSize(new Dimension(bounds.width, bounds.height));

        this.display = display;
    }

    public void paintComponent(Graphics g) {
         Graphics2D g2 = (Graphics2D)g;
         if (display.getControlPanel().Antialiasing()) {
             g2.addRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));
         }
         g2.setColor(Color.white);
         g2.fillRect(0, 0, getWidth(), getHeight());
    }

    public void mousePressed(MouseEvent event) {
        System.out.println("mousePressed()");
        mx1 = event.getX();
        my1 = event.getY();
    }

    public void mouseReleased(MouseEvent event) {
        System.out.println("mouseReleased()");
        mx2 = event.getX();
        my2 = event.getY();

        int mode = display.getControlPanel().Mode();
        switch (mode) {
        case ControlPanel.LINE:
             System.out.println("Line from " + mx1 + ", " + my1 + " to " + mx2 + ", " + my2 + ".");
        }
    }

    public void mouseEntered(MouseEvent event) {
        System.out.println("mouseEntered()");
    }

    public void mouseExited(MouseEvent event) {
        System.out.println("mouseExited()");
    }

    public void mouseClicked(MouseEvent event) {
        System.out.println("mouseClicked()");
    }

    public void mouseMoved(MouseEvent event) {
        System.out.println("mouseMoved()");
    }

    public void mouseDragged(MouseEvent event) {
         System.out.println("mouseDragged()");
    }

    private Display display = null;

    private int mx1 = -1;
    private int my1 = -1;
    private int mx2 = -1;
    private int my2 = -1;
}

المشكلة هي أنه لم يتم استدعاء أي من وظائف الماوس هذه على الإطلاق. DisplayArea يتم إنشاؤه مثل هذا:

da = new DisplayArea(new Rectangle(CONTROL_WIDTH, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT), this);

أنا لست مبرمج جافا حقًا (هذا جزء من مهمة)، لكن لا يمكنني رؤية أي شيء واضحًا بشكل صارخ.هل يمكن لشخص أكثر ذكاءً من رؤية أي شيء؟

هل كانت مفيدة؟

المحلول

ال تنفذ mouselistener، mousemotionlistener يسمح فقط لفئة DisplayArea بالاستماع إلى بعض أحداث الماوس الخاصة بمكون Swing التي سيتم تحديدها.عليك أن تحدد بوضوح ما يجب أن تستمع إليه.لذلك أفترض أنه يمكنك إضافة شيء مثل هذا إلى المُنشئ:

this.addMouseListener(this);
this.addMouseMotionListener(this);

نصائح أخرى

لا أرى أي مكان في الكود حيث يمكنك الاتصال بـ addMouseListener(this) أو addMouseMotionListener(this) لـ DisplayArea حتى تتمكن من الاشتراك في تلك الأحداث.

لا أرى أي رمز هنا للتسجيل في مستمعي الماوس.يجب عليك الاتصال بـ addMouseListener(this) وaddMouseMotionListener(this) على DisplayArea.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top