【问题标题】:Switch Java Button image back and forth?来回切换Java Button图像?
【发布时间】:2011-12-14 23:25:52
【问题描述】:

我有一个使用开关的程序,该开关在按钮单击时将动作事件传递给它:

public void buttonImageReveal(ActionEvent e){

    String temp = e.getActionCommand();

    switch(temp){

        case "1":
        ((JButton)e.getSource()).setIcon(one);
        delay();
        ((JButton)e.getSource()).setIcon(null);
        break;

延迟只是对函数的调用,需要等待 1 秒:

 public void delay(){
        try
        {
            Thread.sleep(1000); 
        }
            catch(InterruptedException e1)
        {
            e1.printStackTrace();
        }
    }

所有结果都是等待而没有图像,期望的结果是图像闪烁一秒钟。

提前致谢!

【问题讨论】:

  • 是代码,整个代码,还是只是一部分,因为没有右括号...
  • 图像的闪烁是什么意思?你到底想达到什么目的?您希望图像保持闪烁还是希望图像消失 1 秒后再次显示?
  • 那里我看不出有任何问题,因为我在所有情况下都工作,请发sscce.org
  • 图像变量是否被正确引用,即。它是否指向图像的正确路径?

标签: java image swing icons jbutton


【解决方案1】:

设置图标后,您正在使线程休眠,因此它无法绘制新图标。睡眠结束后立即将图标设置为空。所以你永远不会看到绘制的图标。

您可以尝试定期使用javax.swing.Timer 更改图标。

【讨论】:

  • 优秀的catch +1,我会删除我的帖子
  • 啊,是的,现在你这么说太明显了,那么有什么好的等待功能不会导致这种情况?
  • @Eric 你已经从@AKJ 得到这个答案:只需使用javax.swing.Timer
  • 我错过了,但我已经走得更远了,但仍然没有乐趣: Timer gameTimer = new Timer(100, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { repaint( ); } });字符串 temp = e.getActionCommand(); switch(temp){ case "1": System.out.println("case1"); ((JButton)e.getSource()).setIcon(one); gameTimer.start(); ((JButton)e.getSource()).setIcon(null);休息;
  • @EricBanderhide 而不是在您的计时器执行的操作中调用 repaint() 尝试调用 setIcon(null)。在开关中,设置好图标后才启动定时器。想法是在计时器触发时重置图标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
相关资源
最近更新 更多