Игра "Волшебный квадрат". Не получается сделать нужную обработку нажатия кнопки - Java
Формулировка задачи:
Есть поле 4 х 4, в котором расположены случайные буквы от А до Р. Нужно, чтобы малые квадраты 2 х 2 вращались по часовой стрелке при нажатии на их левый верхний угол.
Поле игры:
Нужно, чтобы при нажатии на одну кнопку изменялись текстовые значения сразу четырех, это я и не могу реализовать. Получается изменить только значение конкретной кнопки, нужно же узнать текущие значения четырех из малого квадрата и повернуть по часовой стрелке. Увы, не понимаю, как это сделать
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.util.Random;
public class game1 extends JFrame {
Random rand = new Random();
JPanel buttonPanel = new JPanel(new GridLayout(4,4));
ActionListener actionListener = new ButtonClick();
JButton[] buttons=new JButton[16];{
for(int i=0;i<16;i++)
{
buttons[i]=new JButton();}
}
game1() {
setLayout(new BorderLayout());
add(buttonPanel,BorderLayout.CENTER);
for (int i=0; i<16; i++)
{
buttonPanel.add(buttons[i]);
}
setBounds(300, 300, 300, 300);
for (int i=0; i<16; i++)
{
buttons[i].addActionListener(actionListener);
}
int a[] = new int [16];
char l[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P'};
int temp = 0 ;
int i = 0 ;
while(i<15)
{
temp = rand.nextInt(l.length);
for(int j=i; j>=0; --j)
{
if(a[j] == temp)
break;
else if (j==0)
{
a[i] = temp;
++i;
}
}
}
for( i=0; i<16; i++)
{
buttons[i].setText(String.valueOf(l[a[i]]));
}
setVisible(true);
}
public static void main(String[] args) {
new game1();
}
}Решение задачи: «Игра "Волшебный квадрат". Не получается сделать нужную обработку нажатия кнопки»
textual
Листинг программы
private class ButtonClick implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
int k=0;
JButton currentButton=(JButton)e.getSource();
for (int i=0; i<16; i++){
if (currentButton.equals(buttons[i])){
k=i-1;
String current=buttons[k].getText();
buttons[k].setText(buttons[k+4].getText());
buttons[k+4].setText(buttons[k+5].getText());
buttons[k+5].setText(buttons[k+1].getText());
buttons[k+1].setText(current);
}
}
}
}