【发布时间】:2021-10-30 09:47:21
【问题描述】:
我以为我正确实现了MouseListener,但是当我点击画布时,它没有到达System.out.println("Click registered");这一行
我看过的所有教程都按照我的方式实现了鼠标监听器。
程序编译完成,除了鼠标监听器外,一切正常。
package ttt;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Frame extends JFrame implements MouseListener
{
public static Field field = new Field();
public static Game game = new Game();
public static TTTCanvas tttcanvas = new TTTCanvas();
static final long serialVersionUID = 1l;
private static final int width = 700;
private static final int height = 700;
public Frame()
{
setLayout(new BorderLayout());
setResizable(false);
setBounds(400, 400, width, height);
setTitle("Tic Tac Toe");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
add(tttcanvas);
addMouseListener(this);
}
public void mouseClicked(MouseEvent e)
{
System.out.println("Click registered");
int x = field.getFieldfromPixel(e.getX());
int y = field.getFieldfromPixel(e.getY());
game.updateField(x, y);
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
}
【问题讨论】:
-
您不应该使用静态变量。这表明设计不正确。
-
@camickr 我理解静态变量的方式是它们只能有一个实例,例如我在 3 个类中使用字段,但我想在所有 3 个类中使用相同的字段,所以我used static 关于如何做得更好的任何提示?
-
程序设计太复杂了讨论一下。我不能建议你应该如何修复设计。一般来说,如果一个类需要访问它没有创建的另一个类,那么您需要将它作为参数传递给该类。正如 ControlAltDelete 在下面的评论中提到的,您可能需要阅读 MVC 设计。
标签: java swing jframe awt mouselistener