Ты когда пишешь такую конструкцию, ты как бы говоришь компилятору, так, дядя, тут мы создаем кнопку, и вешаем на нее листенер. То есть каждый раз при нажатии кнопки будет срабатывать то, что написано в блоке public void actionPerformed(ActionEvent e) { …… }
Получается, когда листенер вызывает чекгес, он не видит объявление переменной в нем? не принимает это объявление, которое в чекгес? Очень странно или я не правильно понимаю.