Здесь:
public void actionPerformed(java.awt.event.ActionEvent e, JPanel p)
Должно быть
public void actionPerformed(java.awt.event.ActionEvent e)
Вы должны точно соответствовать ожидаемой подписи! Вы не можете просто добавить больше параметров к методу, который вы должны переопределить !
Вы видите, в конце концов, это , а не ваш код, который будет вызывать этот метод при нажатии кнопки. Это будет структура Swing, которая сделает это. Вы говорите: когда действие происходит с этой штукой, перезвоните мой код. Как вы ожидаете, что эта структура может знать, что вы хотите, чтобы дополнительный параметр был передан ?!
Помимо этого: сделайте своей практикой ставить @ Override перед любым методом, который, как вы ожидаете, переопределят метод (как в этом случае, когда вы реализуете метод этого интерфейса). Потому что тогда компилятор может сказать вам, когда вы делаете такие ошибки!
Но, конечно, вы добавили этот параметр, чтобы слушатель мог его использовать. Итак: сделайте это известным слушателю, например, добавив поле к вашему классу Main, которое вы инициализируете в конструкторе! Поэтому вместо того, чтобы передавать панель этому единственному методу (куда она не может перейти), передайте ее, когда делаете new для своего экземпляра Main.