不要更改图标,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; 
    } 
} 
+2

我不能说全部,但我很难理解你的问题和你的代码。我认为这部分可能是一个语言问题。请考虑告诉我们更多。 –

+1

您的代码喜欢它可能会进入长时间运行或永不停止的循环,这将阻止Swing事件线程,冻结您的程序。这是发生了什么? –

+0

如果它没有转到第二个if,那么它可能是k不等于2,那么为什么不把print语句放在while循环开始时打印k的值来检查k = 2是其中之一,还是你已经做到了? –

你应该考虑调用RepaintInvalidate,更新您的GUI这样之后 -

mainframe.repaint(); 
    mainframe.invalidate(); 

这里大型机是你的JFrame对象。

+0

这不是他所需要的,并且在设置JLabel的图标时不应该被需要。 –

+0

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>可帮助在这里。

+0

Thans为您提供帮助,我尝试这种方式。我希望,这对我有帮助! :) – user2933161