Java игра с участием смежных кнопок - PullRequest
0 голосов
/ 10 января 2020

Я делаю небольшую игру, включающую сетку JButtons (MxN), и основной предпосылкой является нажатие на buttonA, а затем на buttonB, раскраска buttonB и смежные кнопки того же цвета, что и buttonB с цветом buttonA. Я сделал это, чтобы вы могли выбрать 3 возможных трудности. Цвета генерируются случайным образом. Основная проблема - заставить цвета меняться.

Это метод, который я вызываю после выбора сложности игры:

 public static void gameMechanics(int m, int n) {
    final String[] pickedColour = {""};
    final String[] placedColour = {""};
    JButton[][] picked = new JButton[m][n];
    JButton[][] placed = new JButton[m][n];
    picked[m][n].addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            pickedColour[0] = picked[m][n].getText();
        }
    });
    placed[m][n].addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            placedColour[0] = placed[m][n].getText();
        }
    });
    if (pickedColour[0] == "R" && placedColour[0] != "R") {
        placed[m][n].setBackground(Color.RED);
        placed[m][n].setText("R");
    }
    else if (pickedColour[0] == "G" && placedColour[0] != "G") {
        placed[m][n].setBackground(Color.GREEN);
        placed[m][n].setText("G");
    }
    else if (pickedColour[0] == "B" && placedColour[0] != "B") {
        placed[m][n].setBackground(Color.BLUE);
        placed[m][n].setText("B");
    }
}

1 Ответ

0 голосов
/ 10 января 2020

Я бы хотел использовать JPanel s и рисовать их, используя вместо этого MouseListener.

Однако, если вы используете JButtons, попробуйте следующее:

button.setBackground(Color.GREEN);
button.setOpaque(true);

Обратите внимание, что это может не сработать , если вы настраиваете внешний вид используя UIManager.

Кроме того, вы выполняете массу дополнительной работы, чтобы отобразить цвет на кнопке - это может привести к путанице и вызвать ошибки в будущем. Вместо этого вы можете попробовать создать свой собственный класс:

class ColoredButton extends JButton {

        private static final long serialVersionUID = 3040767030924461426L;

        private Color color;

        public ColoredButton(Color c) {
            this.color = c;

            this.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    changeColor();
                }
            });
        }

        public void changeColor() {
            this.setBackground(this.color);
            this.setOpaque(true);
        }
    }

Теперь вы можете создать новую ColoredButton:

// Now, this button will turn green when clicked
ColoredButton temp = new ColoredButton(Color.GREEN);
...