ソケットなどを使って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")));
}
}
});
}
カードを受け取り (色、value/actionType を取得するため)、JButton の背景を同じ色に変更し、正しいアイコンを検索します (カードが赤で値が 1 の場合、ボタンの背景を赤に変更します)。番号1の透明画像である1.pngを検索します)
これを行うためのより良い方法があれば、私はそれを知って喜んでいます。現在、実行の開始時にアイコンを設定するだけです。御時間ありがとうございます!