Java mouseevent错误 - “已在类中定义的方法”

时间:2013-05-28 04:12:57

标签: java swing mouseevent thread-sleep mouse-listeners

我正在尝试实现一个click and drag方法,我需要mousePressed和mouseReleased事件。我也将使用mouseClicked事件,因此我实现了MouseMotionListener和MouseListener。

然而,当我去写mousePressed,mouseReleased,mouseEntered,mouseExited方法时,我收到以下错误:

method mousePressed(MouseEvent) is already defined in class BoingPanel

以下是整个班级:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import javax.swing.JPanel;

public class BoingPanel extends JPanel implements MouseMotionListener, MouseListener {

private int width;
private int height;

private int updateRate=40;

ArrayList<Ball> balls;
ArrayList<Line> lines;

private Container box;

private boolean drag = false;

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

public BoingPanel()
{

    balls = new ArrayList<Ball>();

    balls.add(new Ball(100,0));  // adds test ball
    balls.get(0).setXVelocity(5);
    balls.add(new Ball(100,0));
    balls.add(new Ball(400,50));

    lines = new ArrayList<Line>();
    lines.add(new Line(0, height, width, height));


    gameStart();
}

public BoingPanel(int x, int y)
{
    width=x;
    height=y;


    balls = new ArrayList<Ball>();

    balls.add(new Ball(100,0));  // adds test ball
    balls.get(0).setXVelocity(5);
    balls.add(new Ball(100,0));
    balls.add(new Ball(400,50));

    lines = new ArrayList<Line>();


    box = new Container(width, height);


    gameStart();
}

@Override
public void mouseDragged(MouseEvent me) {
}

@Override
public void mouseMoved(MouseEvent e) {
}

@Override
public void mouseClicked(MouseEvent e) {

}

@Override
public void mousePressed(MouseEvent e) {

}

@Override
public void mouseReleased(MouseEvent e) {

}

@Override
public void mouseEntered(MouseEvent e) {

}

@Override
public void mouseExited(MouseEvent e) {

}

 public void gameStart() {

  // Run the game logic in its own thread.
  Thread gameThread = new Thread() {

     public void run() {
        while (true) {
           // Execute one time-step for the game 
           update();
           // Refresh the display
           repaint();
           // Delay and give other thread a chance
           try {

              Thread.sleep(1000 /updateRate);

           } catch (InterruptedException ex) {}
        }
     }
  };
  gameThread.start();  // Invoke GaemThread.run()
}

private void update()
{
    for(Ball a:balls)  //calls balls updated position
    {
        a.update(box);


    }

}

public void paintComponent(Graphics g)
{
    box.paint(g);

    for(Ball a:balls)  //calls balls updated position
    {
        a.paint(g);
    }

    for(Line b:lines)  //draws lines
    {
        b.paint(g);
    }

}

public void actionPerformed(ActionEvent e)
{
    update(); //changes ball position
    repaint(); //refreshes image
}

}

导致此错误的原因是什么?谢谢!

2 个答案:

答案 0 :(得分:1)

我建议这样做,就在变量声明之下,在构造函数之前,没有帮助......

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

你基本上已经实施了两次这些方法。就在构造函数之前和之后。

只需删除这些声明组......

答案 1 :(得分:1)

请删除public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { },然后尝试