无法使鼠标功能起作用

时间:2015-01-03 17:27:56

标签: mouseevent abstract-class mouselistener

我尝试编写一个程序,通过在更改颜色时单击圆圈来测量反应时间,但我无法使任何鼠标功能起作用。知道如何编写代码以便我可以在点击时跟踪鼠标的坐标吗?这是我现在尝试编译程序时的错误。 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)
                {
                }
            }

2 个答案:

答案 0 :(得分:1)

我认为你必须将你的鼠标监听器实现到你的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

    }

}

答案 1 :(得分:0)

你想跟踪一组坐标吗?如果是这样,那么下面的内容可能会有所帮助......

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仅在用户不在按下和释放之间移动时才有效。