Добавить ActionListener () в JButton-Array в Java: ошибка компиляции - PullRequest
0 голосов
/ 19 сентября 2019

Я в начале своей карьеры программиста :) и поставил перед собой цель запрограммировать простую шахматную программу.Я еще не реализовал никакой логики.

К сожалению, я получаю это сообщение об ошибке со следующим кодом: Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem

Однако я все еще могу нормально запустить программу и получить полес рисунком шахматной доски.Только когда я нажимаю кнопку, я получаю вышеупомянутую ошибку.

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Chess extends JFrame {

    //Define variables
    private JButton[][] buttons = new JButton[8][8];
    private Container board;
    private int size = 600;

    // Main class opens constructor of Chess
    public static void main(String[] args) {
        new Chess();
    }

    // constructor
    public Chess() {

        //initialize the Chessboard
        board = getContentPane();
        board.setLayout(new GridLayout(8, 8));
        setSize(size, size);
        setVisible(true);

        //Add buttons to the frame
        for (int y = 0; y < 8; y++) {
            for (int x = 0; x < 8; x++) {
                buttons[y][x] = new JButton();
                board.add(buttons[y][x]);
                buttons[y][x].setBorderPainted(false);

                //color buttons in the checkerboard pattern
                if ((y + x) % 2 != 0) {
                    buttons[y][x].setBackground(new Color(201, 166, 113));
                } else {
                    buttons[y][x].setBackground(Color.WHITE);
                }

                //Add event listener
                ActionListener buttonListener = new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        pressedButton(y,x);
                    }
                };
                buttons[y][x].addActionListener(buttonListener);

            }
        }

    }

    public void pressedButton(int y, int x) {
        System.out.println(x + " " + y);
    }
}

1 Ответ

0 голосов
/ 19 сентября 2019

Я быстро настроил Песочницу и заставил ее работать, используя версию 11 Java и уровень языка 11.

Вы не можете передать x или y внутри ActionListener.

for (int y = 0; y < 8; y++) {
            for (int x = 0; x < 8; x++) {
                int tx = x;
                int ty = y;
                buttons[y][x] = new JButton();
                board.add(buttons[y][x]);
                buttons[y][x].setBorderPainted(false);

                //color buttons in the checkerboard pattern
                if ((y + x) % 2 != 0) {
                    buttons[y][x].setBackground(new Color(201, 166, 113));
                } else {
                    buttons[y][x].setBackground(Color.WHITE);
                }

                //Add event listener
                ActionListener buttonListener = new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        pressedButton(ty, tx);
                    }
                };
                buttons[y][x].addActionListener(buttonListener);

            }
        }

Обратите внимание на добавленные tx и ty, которые заставили его работать.Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...