Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不要右键更改图标,java_Java_Image_Icons - Fatal编程技术网

不要右键更改图标,java

不要右键更改图标,java,java,image,icons,Java,Image,Icons,我的代码有问题。我认为我的问题很简单,但我已经编译了3天,没有得到好的结果。我有三张照片。它们每次都会出现在屏幕上。如果图像的侧面是上、下、右或左,用户可以从4个按钮中选择。另外,我想知道用户是否错了,然后我会统计错误。当用户犯3个错误时,游戏将停止。我已经在下面显示了代码。如果你有什么好主意,请帮帮我。 问题是,在第一个循环中,向右运行。它在第一个if处运行。在这之后,它进行循环,然后它不会转到第二个if。 如果更有用,请提供一些详细信息: 我想做一个程序,它会显示给用户一个图像。这个图像有4

我的代码有问题。我认为我的问题很简单,但我已经编译了3天,没有得到好的结果。我有三张照片。它们每次都会出现在屏幕上。如果图像的侧面是上、下、右或左,用户可以从4个按钮中选择。另外,我想知道用户是否错了,然后我会统计错误。当用户犯3个错误时,游戏将停止。我已经在下面显示了代码。如果你有什么好主意,请帮帮我。 问题是,在第一个循环中,向右运行。它在第一个if处运行。在这之后,它进行循环,然后它不会转到第二个if。 如果更有用,请提供一些详细信息: 我想做一个程序,它会显示给用户一个图像。这个图像有4个方面(上,下,右,左)。当图像在“上边”,用户必须点击向上按钮,当图像在“下边”,用户必须点击向下按钮等。用户可以做3个错误最多。首先,程序显示在右侧的图像,如果用户点击右键,那么我想在左边显示“第二张图片”。如果用户不在左边,那么我想添加一个错误(error++),然后在上面显示第三张图片等。我希望这对理解更有帮助。如果你不能,请告诉我。 我的程序在java的Netbeans。 多谢各位

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;
    }
}
public void actionPerformed(ActionEvent e)
{    

虽然错误你应该考虑调用,然后在你更新你的GUI之后——

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

这里,mainframe是您的JFrame对象。

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

  • 摆脱while循环,因为它只会带来麻烦。它对于线性命令行程序很有用,但对于像您这样的事件驱动GUI程序则不太有用
  • 读入所有图像,在类构造函数中创建所有图像图标,并将它们存储在变量中。无需多次重新读取图像(除非图像很大)
  • 不要使用while循环,而是增加上面方法中的error变量,然后编写该方法,使其根据error的值(取决于类的状态)改变行为
e、 g


注意,
enum方向{UP,DOWN,LEFT,RIGHT}和 map 可能是有用的。

我不能说全部,但是我很难理解你的问题和代码。我认为它的一部分可能是语言问题。请考虑告诉和显示更多。你的代码喜欢它可能进入一个长时间运行或永远不会停止,而会阻止SW。正在调用事件线程,冻结您的程序。这是正在发生的吗?如果没有转到第二个If,那么可能是k不=2,那么为什么不在while循环的开始处放入一个print语句来打印k的值,以检查k=2是否是其中之一,或者您已经这样做了吗?我想这就是他试图说的-用户Is显示了3个图像。用户必须回答图像的方向是向上(正确的方向)、向下(反转)还是向右或向左。用户最多可以犯3个错误。@用户2933161您能确认吗?对不起。因此,我想制作一个程序,它将向用户显示一个图像。此图像有4个面(向上、向下、向右、向左)。当图像处于“向上”位置时,用户必须单击向上按钮,当图像处于“向下”位置时,用户必须单击向下按钮等。用户最多可以执行3个错误。首先,程序在右侧显示图像,如果用户单击向右按钮,则我希望在左侧显示“第二个图像”。如果用户不在左侧,则我希望添加一个错误(错误++)在上面显示了第三张图片之后,我希望这对理解会更有帮助。如果你不能让我知道。这不是他需要的,在设置JLabel的图标时也不应该需要。谢谢@hovercraftfullofels,有什么好主意吗?我想这很容易,不过我尝试了3天。谢谢你的帮助,我尝试了这个我希望这对我有帮助!:)
// 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
}