不要改变图标,java

时间:2013-11-02 14:14:28

标签: java image icons

我的代码有问题。我认为我的问题很简单,但我编译了3天没有取得好成绩。我有三张照片。它们每次都被放在屏幕上一对一。如果图像的一侧是向上,向下,向右或向左,用户可从4按钮​​中选择。此外,我想了解用户是否错了,然后我会计算错误。当用户犯3个错误时,游戏将停止。我在下面显示了代码。如果您有任何好主意,请帮助我。 问题是,在第一个循环中,向右运行。它在第一个if。之后它执行循环然后它不会转到第二个if。 如果它更有帮助,一些细节: 我想制作一个程序,它将向用户显示一个图像。这个图像有4面(上,下,右,左)。当图像处于“上方”时,用户必须点击向上按钮,当图像处于“下方”,用户必须单击向下按钮等。用户最多可以执行3次错误。程序首先显示右侧图像,如果用户点击右键,我想在左侧显示“第二张图像”。如果用户不在左侧,那么我想添加一个错误(错误++)和之后它显示了第三张图像在上方等。我希望它更有帮助理解。如果你不能请告诉我。 我的程序是在Netbeans,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 个答案:

答案 0 :(得分:0)

您应该在更新GUI之后立即调用RepaintInvalidate -

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

这里的主机是你的JFrame对象。

答案 1 :(得分:0)

我在while循环中看到的一个问题是它有陷入无限循环的风险,因为用作退出条件的变量只在某个时间块中更新。我认为你应该重新安排你的逻辑:

  • 摆脱循环,因为它只会造成麻烦。它对于线性命令行程序很有用,但不适用于像你这样的事件驱动的GUI程序。
  • 读入所有图像并在类构造函数中创建所有ImageIcons,并将它们存储在变量中。没有必要多次重新读取图像(除非它们很大)。
  • 不使用while循环,而是在上面的方法中递增错误变量,然后编写方法,以便根据错误的值改变行为(取决于 state 类)。

如,

// 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>可能会有所帮助。