java - 使用鼠标事件 : Am I doing this correctly?

标签 java swing graphics jpanel mouselistener

我对 MouseEvents 和 MouseListeners 非常陌生,最近我问了一个关于创建篮球投篮图表的问题。到目前为止我所拥有的是这个

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

public class StatTracker extends JPanel //implements MouseListener
{
   JPanel court;
   int xCoord, yCoord, clicks;
   boolean made, missed = false;
   public void paintComponent(Graphics g)
   {
      //Draw court lines
      g.setColor(Color.BLUE);
      g.fillRect(190,0,120,190);
      g.drawOval(190,130,120,120);
      g.drawRect(0,0,500,400);
      g.drawArc(52,-110,396,360,0,-180);
      g.drawLine(52,0,52,70);
      g.drawLine(448,0,448,70);

      g.setColor(Color.BLACK);
      g.fillRect(220,35,60,5);
      g.fillOval(240,40,20,20);
      if(made)
      {
         g.setColor(Color.GREEN);
         g.drawString("O", xCoord, yCoord);
      }
      if(missed)
      {
         g.setColor(Color.RED);
         g.drawString("X", xCoord, yCoord);
      }
      //made=false;
      //missed=false;
   } 
   public StatTracker()
   { 
      setLayout(new BorderLayout());
      court = new JPanel();
   }
   public void mouseClicked(MouseEvent e) 
   {
      clicks = e.getClickCount();
      xCoord = e.getX();
      yCoord = e.getY();
      if(xCoord <=500 && xCoord >= 0)
      {
         if(clicks==1)
            missed=true;
         if(clicks==2)
            made=true;
      }
      repaint();
   }
}

因此,基本上,如果在球场范围内(0-500、0-400)单击鼠标,它将根据单击还是双击显示“X”或“O”。主要方法位于单独的驱动程序文件中,一切运行正常(法庭出现在屏幕上),但当我单击法庭时没有任何反应。

感谢任何帮助或建议,谢谢。

最佳答案

我假设您注释掉了 MouseListener因为您收到错误。

问题是,当你 implements MouseListener ,您需要@Override 所有方法,而不仅仅是 mouseClicked

public class StatTracker extends JPanel implements MouseListener {
    ...

    @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) {}
}

不需要的可以留空。只需将代码添加到 mouseClicked如果这就是您所需要的。

您还需要调用super.paintComponent(g)在你的paintComponent方法

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);

正如您从我的代码中看到的,我使用了 @Override 注释。您应该养成对尝试重写的方法执行此操作的习惯。如果覆盖成功,您将不会收到错误。如果不是,那么您将收到错误。

关于java - 使用鼠标事件 : Am I doing this correctly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21584703/

相关文章:

vb.net - 停止在 UserControl 的特定区域引发 Click 事件

java - 如果一个实例同时显示在 Autowiring 和 bean 中,Spring 将使用哪一个

java - 断言不起作用

java - JTabbedPane 鼠标悬停绘制问题

python - 什么库创建简单的 2D 图形,并在 Pythonista 和 "normal"Python 中工作

Java `DisplayMode` 在 Linux 上的位深度是 `-1`

java - 在远程服务器上运行java应用程序

java - 对象内的运行方法

Java replaceAll() 只替换一个实例

java - 需要帮助更改按钮背景