0

Javaスイングを使用して人間のチェスプログラムを作成しようとしています。私は 64 個jPanelsの背中合わせに (グレーと白の背景色を交互に) 持っており、jLabelそれぞれの内側にピースのアイコンを表示するために使用しています。

現在、パネルを連続してクリックすることで、あるパネルから別のパネルにピースを移動できるようにしようとしています。また、「ボード」と呼ばれるアイコン配列を使用して、すべてのピースの位置を保存しています。

これまでのところ、プログラムは最初にクリックされたアイコンを 2 番目に正常に複製しますjPanel(そして、ボード配列に対応する変更を加えます)。ただし、最初にクリックしたアイコンからアイコンを削除して、jPanel複製するのではなく、実際に「移動」するのに苦労しています。

どのパネルが最初に選択されたかをある種の変数に保存し、その変数を使用して、2番目のパネルがクリックされたときにjPanel元のアイコンを設定する必要があることを私は知っています。nullただし、選択したパネルに整数 (1 ~ 64) を使用してから、非常に長い switch ステートメント (switch (int), case 1: jPanel1.setIcon(null), case 2: jPanel2.setIcon(null))など) を使用しないと、どのような変数を使用すればよいかわかりません。

これを行う簡単な方法はありますか (switch ステートメントを使用するだけではありません)。内部にスイングオブジェクトを格納し、後で使用して内部に格納されているオブジェクトをコマンドすることができる、ある種のオブジェクト変数のように? 私が話していることを行う方法を知っている人はいますか?助けていただければ幸いです。

mouseclicked イベントを処理するための私のコード:

private void jPanel1MouseClicked(java.awt.event.MouseEvent evt) { 

    if (pieceSelected == false) 
    { 
        pieceSelection = board[0][0]; 
        pieceSelected = true; 
    } else //if a piece was selected when this panel was clicked 
    { 
        //change this panel's icon to the icon of the first panel 
        jLabel1.setIcon(pieceSelection); 
        board[0][0] = pieceSelection; 

        //change the icon of the first square clicked to null 
        //the following part is the part i'm having trouble with 
        //board[last x coordinate][last y coordinate] = null; 
        //lastjPanel.setIcon(null) 

        pieceSelected = false; 
    } 
}
4

1 に答える 1

0

サイズ [8][8] の 2 次元配列の jPanels を作成する必要があります。

JPanel[8][8] chessBoard = ...

持つのではなく

JPanel jPanel1...
JPanel jPanel2...
JPanel jPanel3...
JPanel jPanel4...
...

次に、コードを 64 回も書き出す必要なく、プログラムによって同じ方法ですべての JPanel にアクセスできます。繰り返したり、検索したりできます。

于 2013-06-12T23:35:50.693 に答える