如何使我的 JButton 计数并更改我的显示?
How do I make my JButton count and change my display?
所以我正在制作一个国际象棋游戏的互动绘画。基本上,目前只有 2 个按钮:下一步和上一步。下一个移动按钮将int变量moveNum加1,上一个移动按钮将int变量moveNum减1。基本上是这样的:
int moveNum = 0;
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("Next Move"))
{
moveNum++;
Display.instance.repaint();
}
else if(e.getActionCommand().equals("Previous Move"))
{
moveNum--;
Display.instance.repaint();
}
}
然后我只有大量图形,每个图形对应 moveNum 的每个值。它看起来有点像这样:
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.BLACK);
if (moveNum == 0)
{
g2d.fill(new Rectangle2D.Double(0, 0, 10, 10));//just for simplicity
}
else if (moveNum == 1)
{
g2d.fill(new Rectangle2D.Double(0, 0, 10, 10));
g2d.fill(new Rectangle2D.Double(0, 0, 20, 10)); //again for simplicity
}
else if (moveNum ==2)
{
g2d.fill(new Rectangle2D.Double(0, 0, 10, 10));
g2d.fill(new Rectangle2D.Double(0, 0, 20, 10));
g2d.fill(new Rectangle2D.Double(0, 0, 30, 10)); //simplicity
}
...
}
但是当我按下按钮时图形没有改变。我可能缺少什么?
更新:我曾尝试在 moveNum 之后调用 Display.instance.repaint(),但现在我根本看不到任何图形。可能是什么问题?
更新 #2:正在执行绘画组件,因为当我输入 System.out.println("Test");该方法正在打印。我现在也看到了无限递归问题(不知道我以前怎么没看到它)。但即使在修复它之后,我仍然没有得到我想要的图形。我意识到出于某种原因,当我全屏显示时可以获得一些图形。但是按钮仍然不会改变图形。使用 System.out.println("测试");方法,我发现当我 运行 程序时打印一次“测试”,当我全屏显示并获取图形时再打印两次,当我按下下一步按钮时再打印 12 次。我不太确定那里发生了什么,我的按钮设置不正确吗?
最后更新:我没有MRE/SSCE,但我已经解决了我的问题。我已经意识到我是宇宙中最大的白痴之一,我的问题是大写。我的按钮不起作用,因为我在片段 e.getActionCommand().equals("Next Move")) 中将它们中的两个都大写了错误的东西。无论如何,非常感谢您的帮助。我不认为我会发现无限递归问题,非常感谢您的帮助。
尝试在 moveNum++;
和 moveNum--;
之后添加 component.repaint()
。
当 component
是您要更新的组件时。
另外,去掉paintComponent(Graphics g)
里面的repaint()
所以我正在制作一个国际象棋游戏的互动绘画。基本上,目前只有 2 个按钮:下一步和上一步。下一个移动按钮将int变量moveNum加1,上一个移动按钮将int变量moveNum减1。基本上是这样的:
int moveNum = 0;
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("Next Move"))
{
moveNum++;
Display.instance.repaint();
}
else if(e.getActionCommand().equals("Previous Move"))
{
moveNum--;
Display.instance.repaint();
}
}
然后我只有大量图形,每个图形对应 moveNum 的每个值。它看起来有点像这样:
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.BLACK);
if (moveNum == 0)
{
g2d.fill(new Rectangle2D.Double(0, 0, 10, 10));//just for simplicity
}
else if (moveNum == 1)
{
g2d.fill(new Rectangle2D.Double(0, 0, 10, 10));
g2d.fill(new Rectangle2D.Double(0, 0, 20, 10)); //again for simplicity
}
else if (moveNum ==2)
{
g2d.fill(new Rectangle2D.Double(0, 0, 10, 10));
g2d.fill(new Rectangle2D.Double(0, 0, 20, 10));
g2d.fill(new Rectangle2D.Double(0, 0, 30, 10)); //simplicity
}
...
}
但是当我按下按钮时图形没有改变。我可能缺少什么?
更新:我曾尝试在 moveNum 之后调用 Display.instance.repaint(),但现在我根本看不到任何图形。可能是什么问题?
更新 #2:正在执行绘画组件,因为当我输入 System.out.println("Test");该方法正在打印。我现在也看到了无限递归问题(不知道我以前怎么没看到它)。但即使在修复它之后,我仍然没有得到我想要的图形。我意识到出于某种原因,当我全屏显示时可以获得一些图形。但是按钮仍然不会改变图形。使用 System.out.println("测试");方法,我发现当我 运行 程序时打印一次“测试”,当我全屏显示并获取图形时再打印两次,当我按下下一步按钮时再打印 12 次。我不太确定那里发生了什么,我的按钮设置不正确吗?
最后更新:我没有MRE/SSCE,但我已经解决了我的问题。我已经意识到我是宇宙中最大的白痴之一,我的问题是大写。我的按钮不起作用,因为我在片段 e.getActionCommand().equals("Next Move")) 中将它们中的两个都大写了错误的东西。无论如何,非常感谢您的帮助。我不认为我会发现无限递归问题,非常感谢您的帮助。
尝试在 moveNum++;
和 moveNum--;
之后添加 component.repaint()
。
当 component
是您要更新的组件时。
另外,去掉paintComponent(Graphics g)
repaint()