不要更改图标,java
我的代码有问题。我认为我的问题很简单,但我已经编译了3天,没有好的结果。我有三个图像。他们每次都会在屏幕上一一显示。如果图像的侧面向上,向下,向右或向左,用户可从4按钮中进行选择。此外,我想了解用户是否是错误的,然后我会计算错误。当用户发出3个错误时,游戏将停止。我已经在下面显示了代码。如果你有什么好主意,请帮助我。 问题是,在第一个循环,运行正确。它在第一个如果。之后,它做循环,然后它不会去秒。 如果它更有帮助,一些细节: 我想制作一个程序,它会显示给用户一个图像。该图像有4个方面(上,下,右,左)。当图像处于“上方” ,用户必须点击向上按钮,当图像处于“向下”状态时,用户必须点击向下按钮等等。用户最多可以执行3个错误。首先,程序在右侧显示图像,如果用户点击右键然后我想在左侧显示“第二图像”。如果用户不在左侧,那么我想添加一个错误(错误++)和在它显示第三张图像之后,我希望它对理解更有帮助。如果你不能请让我知道。我的程序在Netbeans,java。 谢谢不要更改图标,java
public void actionPerformed(ActionEvent e)
{
while(errors<3)
{
image.setIcon(createImageIcon("visual1" + e.getActionCommand() + ".PNG"));
if (k==1)
{
if(e.getSource() == right_button)
{
image.setIcon(createImageIcon("visual2" + e.getActionCommand() + ".PNG"));
}
}
else if (k==2)
{
if(e.getSource() == left_button)
{
image.setIcon(createImageIcon("visual3" + e.getActionCommand() + ".PNG"));
}
}
else if (k==3)
{
if(e.getSource() == up_button)
{
System.out.print("if3");
}
}
else
{
errors++;
}
k=k+1;
}
}
你应该考虑调用Repaint和Invalidate,更新您的GUI这样之后 -
mainframe.repaint();
mainframe.invalidate();
这里大型机是你的JFrame对象。
这不是他所需要的,并且在设置JLabel的图标时不应该被需要。 –
Thanks @HovercraftFullOfEels,有没有人有什么好主意?我认为这很容易,但是我尝试3天..:/ – user2933161
我在while循环中看到的一个问题是,它有可能陷入无限循环,因为用作退出标准的变量只是在某个else块中更新了某些时间。我认为你应该重新安排你的逻辑:
- 摆脱while循环,因为它只会造成麻烦。它对于线性命令行程序非常有用,但不适用于像您这样的事件驱动的GUI程序。
- 阅读所有图像并在类构造函数中创建所有ImageIcons,并将它们存储在变量中。不需要多次重新读取图像(除非它们很大)。
- 而不是使用while循环,在上面的方法中增加错误变量,然后编写方法,以便根据错误值(取决于类的状态)更改行为。
例如,
// somewhere in your code create your icons
Icon rightIcon = ......;
Icon leftIcon = .....;
Icon upIcon = .....;
Icon downIcon = .....;
// elsewhere in your code
public void actionPerformed(ActionEvent e) {
if (errors >= 3) {
// notify user of error
return; // end this method
}
// check if current icon matches image
// if so, change icon
// if not increment error
}
注意的enum Direction {UP, DOWN, LEFT, RIGHT}
和Map<Direction, Icon>
可帮助在这里。
Thans为您提供帮助,我尝试这种方式。我希望,这对我有帮助! :) – user2933161
我不能说全部,但我很难理解你的问题和你的代码。我认为这部分可能是一个语言问题。请考虑告诉我们更多。 –
您的代码喜欢它可能会进入长时间运行或永不停止的循环,这将阻止Swing事件线程,冻结您的程序。这是发生了什么? –
如果它没有转到第二个if,那么它可能是k不等于2,那么为什么不把print语句放在while循环开始时打印k的值来检查k = 2是其中之一,还是你已经做到了? –