- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经发布了我的代码。我无法理解问题的根本原因在哪里。这是我一直在尝试制作的 java chess Engine 的 UI 代码。如果我幸运或速度快的话,该应用程序运行大约 4-5 次移动和 8-9 次移动。最终,当我移动鼠标时,我遇到了一系列无限的错误。我认为我的代码在某个地方正在创建 mouseListeners 的多个实例,我认为这是不应该发生的。请指导我该怎么做。
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
public class UserInterface extends JPanel implements MouseListener, MouseMotionListener {
static int mouseX, mouseY, newMouseX, newMouseY;
static int squareSize = 32;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
this.setBackground(new Color(120, 100, 45));
this.addMouseListener(this);
this.addMouseMotionListener(this);
for (int i = 0; i < 64; i += 2) {
g.setColor(new Color(255, 200, 100));
g.fillRect((i % 8 + (i / 8) % 2) * squareSize, (i / 8) * squareSize, squareSize, squareSize);
g.setColor(new Color(150, 50, 30));
g.fillRect(((i + 1) % 8 - ((i + 1) / 8) % 2) * squareSize, ((i + 1) / 8) * squareSize, squareSize, squareSize);
}
Image chessPiecesImage;
chessPiecesImage = new ImageIcon("ChessPieces.png").getImage();
for (int i = 0; i < 64; i++) {
int j = -1, k = -1;
switch (alphaBetaChess.chessBoard[i / 8][i % 8]) {
case "P":
j = 5;
k = 0;
break;
case "p":
j = 5;
k = 1;
break;
case "R":
j = 2;
k = 0;
break;
case "r":
j = 2;
k = 1;
break;
case "K":
j = 4;
k = 0;
break;
case "k":
j = 4;
k = 1;
break;
case "B":
j = 3;
k = 0;
break;
case "b":
j = 3;
k = 1;
break;
case "Q":
j = 1;
k = 0;
break;
case "q":
j = 1;
k = 1;
break;
case "A":
j = 0;
k = 0;
break;
case "a":
j = 0;
k = 1;
break;
}
if (j != -1 && k != -1) {
g.drawImage(chessPiecesImage, (i % 8) * squareSize, (i / 8) * squareSize, (i % 8 + 1) * squareSize, (i / 8 + 1) * squareSize, j * 64, k * 64, (j + 1) * 64, (k + 1) * 64, this);
}
}
repaint();
// g.setColor(Color.black);
// g.fillRect(x, y,500/8,500/8);
}
@Override
public void mouseMoved(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
if (e.getX() < 8 * squareSize && e.getY() < 8 * squareSize) {
//if inside the board
mouseX = e.getX();
mouseY = e.getY();
repaint();
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (e.getX() < 8 * squareSize && e.getY() < 8 * squareSize) {
//if inside the board
newMouseX = e.getX();
newMouseY = e.getY();
if (e.getButton() == MouseEvent.BUTTON1) {
String dragMove;
if (newMouseY / squareSize == 0 && mouseY / squareSize == 1 && "P".equals(alphaBetaChess.chessBoard[mouseY / squareSize][mouseX / squareSize])) {
//pawn promotion
dragMove = "" + mouseX / squareSize + newMouseX / squareSize + alphaBetaChess.chessBoard[newMouseY / squareSize][newMouseX / squareSize] + "QP";
} else {
//regular move
dragMove = "" + mouseY / squareSize + mouseX / squareSize + newMouseY / squareSize + newMouseX / squareSize + alphaBetaChess.chessBoard[newMouseY / squareSize][newMouseX / squareSize];
}
String userPosibilities = alphaBetaChess.possibleMoves();
if (userPosibilities.replaceAll(dragMove, "").length() < userPosibilities.length()) {
//if valid move
alphaBetaChess.makeMove(dragMove);
alphaBetaChess.flipBoard();
alphaBetaChess.makeMove(alphaBetaChess.alphaBeta(alphaBetaChess.globalDepth, 1000000, -1000000, "", 0));
alphaBetaChess.flipBoard();
repaint();
}
}
}
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseDragged(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
最佳答案
添加鼠标监听器,并在构建面板的地方添加运动监听器。这样就不会多次创建运动监听器。
关于java - 在java.awt.AWTEventMulticaster.mouseExited(AWTEventMulticaster.java :309),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47515390/
AWT-EventQueue 线程和 AWT-Shutdown 线程没有在我们的应用程序中关闭。有没有一种调试技术可以找出它们不存在的原因?有什么特别的东西要寻找吗? 最佳答案 如果你的意思是关闭所有
java.awt.* 和 java.awt.event.* 有什么区别? 最佳答案 这只是两个不同的包。 当您说import java.awt.*时,它仅导入那些完全属于java.awt包的类,而不是
我正在将 aadhar 集成到 liferay 中。我尝试了这个链接 https://developer.uidai.gov.in/site/book/export/html/18 所以我想将其集成到
我想知道如何确定 Java.awt.Rectangle 是否包含特定 Java.awt.Color 的像素。我一直在到处寻找,但找不到任何关于此的信息,甚至找不到任何可能的信息。 所以我想知道如何确定
我试图在组件和图像之间切换面板的内容,它适用于组件: imgpanel.removeAll(); Component comp; if ((comp = player.getVisualCompone
我在使用 JAVA 编码时遇到一些错误,我一直在尝试解决这个问题,也试图找到其他有同样问题的人并修复它,但没有任何效果... 嗯..这是代码 package ca.vanzeben.game;
我想我可以尝试一下 JAXB 来处理存储和恢复设置。但即使是“最简单”的例子我也遇到了麻烦: import java.awt.Point; public class Config { public
这个问题已经有答案了: Import package.* vs import package.SpecificType [duplicate] (10 个回答) 已关闭 7 年前。 在我现在正在进行的
private static byte[] get_byte_data(BufferedImage image) { //WritableRaster raster = image.get
是否有可能获得标准 AWT Cursor以位图图像的形式(例如 BufferedImage )或任何可在 Graphics2D 上绘制的图像?例如,文本光标 new Cursor(Cursor.TEX
我的代码中有三个点,我想填充它们之间的区域,或者换句话说,在 3 个点之间绘制并填充一个三角形。 我想过简单地用 for 循环绘制线条(从 x1 到 x2),但我认为这不会有效,是否有其他更有效的方法
我正在制作一个小脚本,我使用鼠标键来节省我的工作时间。我可以正确、良好地使用鼠标键。但是,当使用 java.awt.Robot 和 java.awt.event.KeyEvent 时,鼠标键基本上被忽
我正在尝试在 scala 中使用 java awt 来制作一个简单的桌面应用程序。我已经在它上面工作了几天,没有任何问题,直到我有 2 天没有碰它,当我回来时,我得到一个 java.lang.NoCl
我在 VisualVM 和线程 View 中监视一个 JavaFX 程序,不断有 AWT-EventQueue-0 和 AWT-Shutdown 线程被创建和销毁。这是正常行为吗?这是什么原因? 最佳
我需要将 java.awt.geom.Area 或 java.awt.Shape 转换为 java.awt.Polygon。我所知道的是:isSingular = true、isPolygonal =
我正在重新使用 Java 并审查我的一些旧代码,并且我看到了很多我已经完成的地方 import javax.swing.*; import java.awt.*; 或者实际上从 swing/awt 包
晚上, 我在玩一个小的 swing 应用程序,我添加了一个按钮来响应按下。因此我需要实现 ActionListener。我已经添加了这一行: import java.awt.*; 但它告诉我找不到“A
我有这个 java 代码: Editor() { javax.swing.SwingUtilities.invokeLater(new Runnable() { pub
请帮我解决这个问题 sun.awt.image.ToolkitImage 无法转换为 java.awt.image.BufferedImage if (shape.hasImage())
嗨 Stackoverflow 的 friend 们 我最近将 Jenkins 服务器配置到 Apache Tomcat 7.0.42我制作的程序是将 jenkins.war 文件部署到 tomcat
我是一名优秀的程序员,十分优秀!