0

ソケットなどを使って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を検索します)

これを行うためのより良い方法があれば、私はそれを知って喜んでいます。現在、実行の開始時にアイコンを設定するだけです。御時間ありがとうございます!

GUI

4

3 に答える 3

1

2 つの確認事項:

  1. setBtnIcon必要なときに起動するように、ある種のイベントリスナー内で呼び出していることを確認してください。「実行の開始時にアイコンを設定するだけ」がメソッドが1回だけ呼び出されたことを意味するかどうかは、元の質問からわかりませんでした。
  2. デバッガーを使用してコードを実行 (または print ステートメントを 1 つまたは 2 つ追加) して、の結果getClass().getResource(...)が notであることを確認しnullます。特にアプリを JAR ファイルで配布している場合は、同じ場所にあるリソースを取得するのが難しい場合があります。
于 2013-11-09T18:16:54.947 に答える
0

解決済み: Observer の update 関数内で上記の関数を呼び出していませんでした。ばかげたことですが、本当です。助けてくれてありがとう、あなたの答えのいくつかは役に立ちました。クライアント ウィンドウはオブザーバーです。centralCard が変更されると、上で書いた関数を呼び出す必要があります。

于 2013-11-09T18:52:04.057 に答える
0

JButtonの「最終」ステートメントを削除しようとしましたか?

于 2013-11-09T18:02:54.077 に答える