как исправить локальную переменную, на которую ссылается внутренний класс, должно быть окончательной или, по сути, окончательной ошибкой - PullRequest
0 голосов
/ 03 ноября 2018

Можете ли вы объяснить мне, что означает ошибка "локальная переменная, на которую ссылается внутренний класс, должна быть конечной или фактически конечной", и почему я получаю ее даже после объявления моих переменных как окончательных.

вот мой код:

public class FenetreJeu extends JFrame {

    final Echiquier e = new Echiquier();
    FenetreJeu fj;
    final public JLabel[][] labels = new JLabel[8][8];

    Color couleur = new Color(51, 102, 0);
    final Border border = BorderFactory.createLineBorder(Color.RED, 3);

    public void moves() {

        for (int i = 0; i <= 7; i++) {
            for (int j = 0; j <= 7; j++) {
                labels[i][j].addMouseListener(new MouseAdapter() {
                    @Override
                    public void mouseClicked(MouseEvent ee) {
                        labels[i][j].setBorder(border);
                    }

                });
            }
        }
    }
}

Я получаю сообщение об ошибке в этой строке

labels[i][j].setBorder(border);

Я пытаюсь изменить границы цвета надписей, когда mouseEvent (нажатие, нажатие или перетаскивание), и мне нужно использовать переменные i, j внутри метода mouseClicked.

1 Ответ

0 голосов
/ 03 ноября 2018

после всех отзывов, которые я получил, мне наконец-то удалось найти решение, которое мне подходит, ключом было заменить переменные i, j двумя другими окончательными переменными, как, например, чтобы я мог использовать их внутри метода mouseClicked

   public void moves(){

    for (int i = 0; i<=7;i++){
     for ( int j=0 ; j <= 7 ; j++){
         final int k = i;
         final int l = j;
       labels[i][j].addMouseListener(new MouseAdapter() {

           @Override 
            public void mouseEntered(MouseEvent ee) {
                   labels[k][l].setBorder(border);
                   System.out.println("the case holding the "+e.cases[k][l].getPiece().getType());
            }       });
     }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...