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;
}
}