Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用MouseEvents:我这样做正确吗?_Java_Swing_Graphics_Jpanel_Mouselistener - Fatal编程技术网

Java 使用MouseEvents:我这样做正确吗?

Java 使用MouseEvents:我这样做正确吗?,java,swing,graphics,jpanel,mouselistener,Java,Swing,Graphics,Jpanel,Mouselistener,我对MouseeEvents和MouseListeners非常陌生,最近我问了一个关于创建篮球投篮图的问题。到目前为止,我得到的是这个 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class StatTracker extends JPanel //implements MouseListener { JPanel court; int xCoord, yCoord, cl

我对MouseeEvents和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();
   }
}
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
公共类StatTracker扩展了JPanel//实现了MouseListener
{
杰帕内尔法院;
int xCoord、yCoord、clicks;
布尔值made,missed=false;
公共组件(图形g)
{
//划界
g、 setColor(Color.BLUE);
g、 fillRect(190,0120190);
g、 drawOval(190130120120);
g、 drawRect(0,0500400);
g、 牵引弧(52,-110396360,0,-180);
g、 抽绳(52,0,52,70);
g、 抽绳(448,0448,70);
g、 设置颜色(颜色为黑色);
g、 fillRect(220,35,60,5);
g、 圆形(240,40,20,20);
如果(制造)
{
g、 setColor(Color.GREEN);
g、 抽绳(“O”、xCoord、yCoord);
}
如果(错过)
{
g、 setColor(Color.RED);
g、 抽绳(“X”、xCoord、yCoord);
}
//制造=虚假;
//遗漏=错误;
} 
公共StatTracker()
{ 
setLayout(新的BorderLayout());
court=新JPanel();
}
公共无效mouseClicked(MouseEvent e)
{
clicks=e.getClickCount();
xCoord=e.getX();
yCoord=e.getY();
如果(xCoord=0)
{
如果(单击==1)
错过=正确;
如果(单击==2)
制造=真实;
}
重新油漆();
}
}
因此,基本上,如果鼠标在场地范围内(0-500,0-400)单击,它将根据单击或双击显示“X”或“O”。主要方法是在一个单独的驱动程序文件中,所有操作都正常运行(球场显示在屏幕上),但当我单击球场时,什么也没有发生


非常感谢您提供的任何帮助或建议。

我想您是因为出错而注释掉了
鼠标侦听器

问题是,当您
实现MouseListener
时,您需要
@覆盖所有的方法,而不仅仅是
鼠标点击

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) {}
}
那些你不需要的,你可以空着。如果您只需要将代码添加到鼠标选中的
中即可

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

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

正如您从我的代码中看到的,我使用@Override注释。对于试图重写的方法,应该养成这样做的习惯。如果覆盖成功,则不会出现错误。如果不是这样,您将得到一个错误。

挑剔:不要扩大paintComponent的范围-它仅用于内部使用:-)@kleopatra这是一个打字错误。这里很晚了。快睡觉了:)+1愉快地同意。。给我一定量的“克利奥帕特拉好吧,妈妈,你抓住我了。但是但是这是周末:P