JButton的图标没有变化(UNO纸牌游戏)

时间:2013-11-09 17:54:54

标签: java swing sockets icons jbutton

我正在使用套接字和东西实现UNO游戏。到目前为止,我一直在为每个客户端开发GUI,在为每个玩家和随机中心卡获取一组随机卡片时,我已经成功了,但是卡在了以下内容上: 我用一个按钮来代表一张牌的每张牌,说我想选择一张红牌(因为中央牌也是红牌)我已经完成了所有的验证方法,允许你放置或不放置你的牌。但是中央按钮的图标没有改变(中央卡变量改变了,但没有改变代表它的按钮图标)。

我读了这个问题并试图使用SwingUtilities.invokeLater,但图标没有改变(Dynamically change jButton icon)。

以下是我更改JButton图标的代码:

public void setBtnIcon( final javax.swing.JButton btn,  final modelo.Card c) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            btn.updateUI();
            Color color = c.getColor();
            btn.setBackground(color);
            if (c instanceof modelo.NumberCard) {
                short value = ((modelo.NumberCard) c).getValue();


                String str = Short.toString(value);
                btn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jugadoruno/vista/" + str + ".png")));

            } else if (c instanceof modelo.ActionCard) {
                modelo.ActionType t = ((modelo.ActionCard) c).getActionType();
                String str = t.toString();

                btn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/jugadoruno/vista/" + str + ".png")));

            }

        }
    });
}

它接收一张卡片(获取它的颜色,值/ actionType),它将JButton的背景更改为相同的颜色,并搜索正确的图标(如果卡片为红色且值为1则会更改按钮的背景为红色并搜索1.png,这是一个透明图像,编号为1)

如果有更好的方法,我会很高兴知道这一点。现在它只是在执行开始时设置图标。 谢谢你的时间!

GUI

3 个答案:

答案 0 :(得分:1)

要检查两件事:

  1. 确保您在某种事件侦听器中调用setBtnIcon,以便在您需要时触发它。我无法从你原来的问题中看出“它只是在执行开始时设置了图标”意味着该方法只被调用一次。
  2. 使用调试器运行代码(或添加一两个打印语句)以确保getClass().getResource(...)的结果不是null。获取共存资源可能是一件棘手的事情,特别是如果您将应用程序分发到JAR文件中。

答案 1 :(得分:0)

您是否尝试删除JButton“最终”声明?

答案 2 :(得分:0)

解决:我没有在Observer的update函数中调用上面的函数,傻事却是真的;感谢您的帮助,您的一些答案很有帮助。 客户端窗口是观察者,当更改centralCard时,我需要调用我上面写的函数。