Swing コンポーネントを使用して GUI の奥深くでアイコンを変更するのに問題があります。私はJavaで楽しみのためにチェスゲームを作成しています.GUIの右側がグリッドに取られたピースを表示することによってピースが取られたときに応答するようにします. 私の問題は、新しい画像でsetIcon()
関数を呼び出して適切なに追加するたびに、更新されないことです。初めてのときはうまくいきますが、GUIに追加した後は、思ったように変更できません。ここにスクリーンショットがあるので、私が何を得ているかがわかります:JLabel
JPanel
setIcon()
おわかりのように、ポーンが取られましたが、私の努力にもかかわらず、右側のパネルにはこれが反映されていません。
私はいくつかの調査を行いましたが、次の質問は似ていました:関連する質問
Camickr は、私が更新しようとしている JLabel の 2 つのインスタンスである可能性があると答えており、私の場合はそうなっていると思います。GUIを初期状態に設定するときに、最初に右側のパネルのすべてのアイコンをnullに設定しました。これを行うコードは次のとおりです。
for (int i = 0; i < 16; i++)
{
piece1Labels[i] = new JLabel();
piece2Labels[i] = new JLabel();
piece1Panels[i] = new ChessSpace(playerDeadPieceTile);
piece2Panels[i] = new ChessSpace(playerDeadPieceTile);
piece1Labels[i].setPreferredSize(new Dimension(67,66));
piece2Labels[i].setPreferredSize(new Dimension(67,66));
piece1Labels[i].setIcon(null);
piece2Labels[i].setIcon(null);
piece1Panels[i].add(piece1Labels[i]);
piece2Panels[i].add(piece2Labels[i]);
player1PiecePanel.add(piece1Panels[i]);
player2PiecePanel.add(piece2Panels[i]);
}
ChessSpace
そして、ここでは、拡張するpiece1Panels 配列の最初のパネルで初期化が呼び出された後に、これらのパネルの 1 つを変更しようとしていますJPanel
。
//Try to change right panel icon after GUI setup
piece1Labels[0] = new JLabel();
piece1Panels[0] = new ChessSpace(playerDeadPieceTile);
piece1Labels[0].setPreferredSize(new Dimension(67,66));
piece1Labels[0].setIcon(new ImageIcon("C:/Users/Shasta/workspacejava/chess/images/terranpawn.jpg"));
piece1Panels[0].add(piece1Labels[0]);
piece1Labels と piece1Panels は、クラス拡張の変数ですJFrame
。問題は、クラス変数を更新しているだけで、GUI に追加されたインスタンスを更新していないことだと思います。
編集: Alican Ozgoren & Hovercraft Full Of Eels が指摘したように、 の新しいインスタンスを宣言するべきではありませんでしたJLabel
。それらは冗長でした。
次のコード行は、私が望むことをしているようです:
//Try to change right panel icon after GUI setup
piece1Labels[0].setIcon(new ImageIcon("C:/Users/Shasta/workspacejava/chess/images/terranpawn.jpg"));