Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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 鼠标侦听器到游戏面板实例_Java_Swing_User Interface_Mouselistener - Fatal编程技术网

Java 鼠标侦听器到游戏面板实例

Java 鼠标侦听器到游戏面板实例,java,swing,user-interface,mouselistener,Java,Swing,User Interface,Mouselistener,我正在创建一个Tic-Tac-Toe游戏,其中我使用MouseListener向我的游戏面板添加功能。当用户单击其中一个单元格时,根据轮到谁来生成X或O图形。我曾尝试将鼠标侦听器添加到窗格中,但当我运行鼠标侦听器时,当我单击鼠标时,什么也没有发生。有没有办法解决这个问题 这是我的游戏面板: publicgamemain(){ Handler=newhandler(); 这是addMouseListener(handler); //设置JLabel 标签=新的JLabel(“”); label.s

我正在创建一个Tic-Tac-Toe游戏,其中我使用MouseListener向我的游戏面板添加功能。当用户单击其中一个单元格时,根据轮到谁来生成X或O图形。我曾尝试将鼠标侦听器添加到窗格中,但当我运行鼠标侦听器时,当我单击鼠标时,什么也没有发生。有没有办法解决这个问题

这是我的游戏面板:

publicgamemain(){
Handler=newhandler();
这是addMouseListener(handler);
//设置JLabel
标签=新的JLabel(“”);
label.setboorder(BorderFactory.createEmptyBorder(2,5,4,5));
label.set不透明(true);
标签.立根(颜色:浅灰色);
setLayout(新的BorderLayout());
添加(标签,边界布局。南部);
setPreferredSize(新维度(画布宽度、画布高度+30));
线路板=新线路板();
initGame();
}   
}
下面是我的处理程序类,其中包含假定要运行的mouseClick()方法:

公共类处理程序扩展了MouseAdapter{
公共无效鼠标单击(鼠标事件e){
int mouseX=e.getX();
int mouseY=e.getY();
//单击行和列
int rowSelected=鼠标/单元格大小;
int colSelected=mouseX/单元格大小;
if(currentState==GameState.PLAYING){
如果(rowSelected>=0&&rowSelected=0&&colSelected
你的问题启发了我,让我接受了写一个tic-tac-toe游戏的挑战,因为我在处理定制绘画方面没有太多经验。下面的代码有大量的注释,所以我希望这些注释能够很好地解释代码

我认为比我更有经验的人会在下面的代码中发现缺陷,这是意料之中的,因为正如我已经提到的,我在这种编程方面没有太多经验。尽管如此,我希望它足够好,以便对您有所帮助

请注意,下面的代码使用了JDK14引入的一个新java特性,即。因此,作为如何将java记录集成到代码中的一个简单示例,它也可能对人们有所帮助。如果您没有使用JDK 14,或者如果您使用JDK 14但尚未启用,则可以简单地用一个简单的类替换记录定义。只需将单词
record
替换为
class
,并向代码中添加构造函数和“getter”方法。默认情况下,
记录
中的“getter”方法的名称只是字段的名称,例如,对于记录Square中的成员
minX
(在下面的代码中),“getter”方法是
minX()

import java.awt.BasicStroke;
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Point;
导入java.awt.RenderingHints;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入javax.swing.BorderFactory;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.WindowConstants;
/**
*一个简单的井字游戏。用户在一个空白的正方形上单击鼠标
*在棋盘上画一个0或一个十字,这取决于轮到谁
*是的。每个方块都有一个索引,如下所示。
* 
* 0    1   2
* 
* 3    4   5
* 
* 6    7   8
* 
*见维基百科。
*/
公共类GameMain扩展JPanel实现ActionListener、MouseListener、Runnable{
/**用于序列化此类的实例*/
私有静态最终长serialVersionUID=7014608855599083001L;
/**十字架*/
私有静态最终字符交叉='X';
/**零*/
私有静态最终字符数='O';
/**tic tac趾板中每个正方形的尺寸*/
专用静态最终整数平方_尺寸=80;
/**获胜所需的连续方块数*/
所需的专用静态最终整数_平方=3;
/**tic tac趾板中的方块总数*/
私有静态最终整数总平方=9;
/**tic tac趾板中的9个正方形中的每一个*/
私人最终广场[]广场=新广场[]{新广场(1,1,99,99),
新广场(101,1,199,99),,
新广场(201,129999),
新广场(10199199),
新广场(101101199199199),
新广场(201101299199),
新广场(120199299),
新广场(101201199299),
新广场(201201299299)};
/**新的井字游戏开始时{@link#turnlab}的文本。