我正在使用套接字和其他东西实现 UNO 游戏。到目前为止,我一直在为每个客户端开发 GUI,当为每个玩家获得一组随机卡片和随机中央卡片时,我已经成功,但遇到了以下问题:我正在使用一个按钮来表示每张卡片一手牌,假设我想选择一张红牌(因为中央牌也是红牌) 我已经完成了所有允许您放置或不放置卡片的验证方法。但是中央按钮的图标没有改变(中央卡片变量发生变化,但代表它的按钮图标没有改变)。
我阅读了这个问题并尝试使用 SwingUtilities.invokeLater 但图标没有改变(动态更改 jButton 图标)。
这是我更改 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")));
}
}
});
}
它接收一张卡片(获取它的颜色、值/动作类型),将 JButton 的背景更改为相同的颜色,并搜索正确的图标(如果卡片为红色且值为 1,它将更改按钮的背景为红色并搜索 1.png ,它是数字为 1 的透明图像)
如果有更好的方法来做到这一点,我会很高兴知道它。现在它只是在执行开始时设置图标。谢谢你的时间!