我对Mouseevents and 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
ash aLL 这些方法,而不仅仅是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
,如果您需要的话。
还需要在paintComponent
方法中调用super.paintComponent(g)
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
也可以从我的代码中看到,我使用@Override注释。您应该养成这样做的习惯。如果这是成功的替代,您将不会遇到错误。如果不是,那么您将会出现错误。