2013-06-12 3 views
0

Я пытаюсь создать человека в шахматной программе человека, используя java swing. У меня есть 64 jPanels спина к спине (чередующиеся между серыми и белыми цветами фона) с jLabel внутри каждого из них, которые я использую для отображения значков для фрагментов.Переменная для хранения объектов?

Прямо сейчас я пытаюсь сделать так, чтобы вы могли перемещать кусок с одной панели на другую, нажав панели в режиме суедейства. Я также использую массив значков, называемый «доска», чтобы сохранить позиции всех частей.

Пока программа с успехом дублирует значок первого щелкнула jPanel ко второму (и делает соответствующее изменение в массиве доски). Тем не менее, у меня возникли проблемы с удалением значка с первого щелчка jPanel, так что часть фактически «перемещается», а не просто дублирует.

Я знаю, что мне как-то нужно сохранить, какая панель изначально выбрана в какой-то переменной, а затем использовать эту переменную для установки значка оригинала jPanel на null при нажатии второй панели. Однако, не используя целое число для выбранной панели (1-64), а затем очень длинный оператор switch (switch (int), case 1: jPanel1.setIcon(null), case 2: jPanel2.setIcon(null)) и т. Д.), Я не знаю, какую переменную использовать.

Есть ли более простой способ сделать это (чем просто использовать оператор switch)? Как какая-то переменная объекта, я могу хранить объект swing внутри, а затем использовать позже, чтобы указать, какой объект хранится внутри? Кто-нибудь знает, как делать то, о чем я говорю? Помощь будет высоко оценена.

Мой код для обработки 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; 
    } 
} 
+0

См. Также этот [пример] (http://stackoverflow.com/a/2562685/230513) и [вариант] (http://stackoverflow.com/a/2563350/230513). – trashgod

ответ

0

Вы должны сделать двумерный массив размером [8] [8] из JPanels, например,

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

вместо того

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

Тогда вы можете получить доступ ко всем JPanels таким же образом, программно, без необходимости написания кусок кода из 64 раз. Вы можете выполнять итерацию, поиск и т. Д., Что угодно.

+0

Это хорошая идея, спасибо. – user2472083

Смежные вопросы