Не удается заставить функции мыши работать

Я пытаюсь написать программу, которая измеряет время реакции, нажимая на круг, когда он меняет цвет, но я не могу заставить работать какие-либо функции мыши. Любая идея, как написать код, чтобы я мог отслеживать координаты мыши, когда она щелкает? Вот ошибка, когда я пытаюсь скомпилировать программу сейчас. MouseListener является абстрактным; не может быть создан MouseListener circle = new MouseListener();

            import java.util.*;
            import java.io.*;
            import java.awt.*;
            import java.awt.event.*;
            import java.util.Random;
            import java.awt.event.MouseEvent;
            import java.awt.event.MouseListener;
            import java.awt.event.MouseMotionListener;

            public class Stopwatch
            {
                public static int windowX = 900; 
                public static int windowY = 700;

                public static void main(String args[])
                {
                    GfxApp gfx = new GfxApp();
                    gfx.setSize(900,700);
                    gfx.addWindowListener(new WindowAdapter() {public void
                    windowClosing(WindowEvent e) {System.exit(0);}});
                    gfx.show();
                }
            }

            class GfxApp extends Frame
            {
                public void paint(Graphics g) 
                {           
                    Timer.drawgreen(g);
                    Timer.pause();
                    Timer.drawred(g);

                }
            }

            class Timer
            {
                public static int circlex = 300;
                public static int circley = 200;
                public static int radius = 250;

                public static void drawgreen(Graphics g)
                {
                    g.setColor(new Color(0,255,0));
                    g.fillOval(circlex, circley, radius, radius);
                }

                public static void drawred(Graphics g)
                {
                    g.setColor(new Color(255,0,0));
                    g.fillOval(circlex, circley, radius, radius);
                }

                public static void pause()
                {
                    Random rand = new Random();

                    int k = rand.nextInt(301);

                    for(double i = 0; i < 500 + k; i += .000001)
                    {
            //                      delay
                    }
                }
            }

            class Mouse
            {
                MouseListener circle = new MouseListener();

                public void mouseClicked (MouseEvent e)
                {
                }
                public void mouseEntered (MouseEvent e)
                {
                }
                public void mouseExited (MouseEvent e)
                {
                }
                public void mousePressed (MouseEvent e)
                {
                }
                public void mouseReleased (MouseEvent e)
                {
                }
            }

person Sygnerical    schedule 03.01.2015    source источник
comment
Ошибка говорит вам, что не так, вам нужно либо создать анонимную внутреннюю реализацию интерфейса, либо попробовать какой-то другой класс (возможно, это не то, что вы хотите).   -  person MightyPork    schedule 03.01.2015


Ответы (2)


Я думаю, вам нужно внедрить прослушиватель мыши в класс Frame и работать с ним там. MouseListener - это интерфейс, а не класс, поэтому его нельзя создать.

Это пример с KeyListener

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;

public class Window extends JFrame {

private static final long serialVersionUID = -8255319694373975038L;
public static boolean change = false;

KPanel kp = new KPanel();
KeyListen kl = new KeyListen();
Rect r[];

public Window() {   
    JFrame w = new JFrame("okno");
    w.setDefaultCloseOperation(EXIT_ON_CLOSE);
    w.setVisible(true);
    w.setSize(500, 500);
    w.setResizable(false);
    w.getContentPane().add(kp);
    w.addKeyListener(kl);
}

}



class KeyListen implements KeyListener {

    @Override
    public void keyPressed(KeyEvent evt) {

    }

    @Override
    public void keyReleased(KeyEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyTyped(KeyEvent arg0) {
        // TODO Auto-generated method stub

    }

}
person magic-sudo    schedule 03.01.2015

Вы хотите просто отслеживать один набор координат? Если это так, то, возможно, что-то вроде ниже поможет...

double xClick = 0;
double yClick = 0;

private MouseListener click = new MouseAdapter() {
    public void mouseReleased(MouseEvent e) {
                //Get the Mouse Location and store it.
                double xClick = e.getX();  //mouse's X location
                double yClick = e.getY(); //mouse's Y location 
      }
};

Затем вам нужно будет определить переменную xClick и yClick и определить, пересекаются ли они с формой круга.

if(ellipse.contains(e.getX(), e.getY())){
                //Do Something in here...
}

Если вы хотите отслеживать все местоположения щелчков мыши, используйте массив двойников или массив Point2D.

Надеюсь это поможет.

Также используйте mouseReleased или mousePressed для обнаружения щелчка. MouseClicked работает, только если пользователь не переключается между нажатием и отпусканием.

person chin-apse    schedule 05.01.2015