Вы получаете ClassCastException, потому что слушатель мыши находится не в JTextField, а в JMenuItem. Это два разных компонента, не связанных друг с другом, поэтому JMenuItem не знает, что JTextField «запустил его», поэтому, если вы не выполните ассоциацию самостоятельно, вы не сможете достичь этого напрямую.
Почему бы вам немного не изменить свой класс вместо использования анонимных адаптеров:
Заставьте ваш класс напрямую реализовывать MouseListener.
Реализуйте методы интерфейса MouseListener (в основном mouseReleased (), mousePressed () и т. Д.) Те, кого вы не интересуете, просто оставьте их пустыми (вам все равно нужно их объявить).
Затем измените это:
menuItem.addMouseListener(new MouseAdapter()
{
public void mouseReleased(final MouseEvent e)
{
System.out.println(((JMenuItem)e.getComponent()).getText());
onHeadingClicked(e); // Error : java.lang.ClassCastException: javax.swing.JMenuItem cannot be cast to javax.swing.JTextField
// How to get the orininal JTextField event that started this pop up menu, so I can pass it onto onHeadingClicked() ?
}
});
к этому:
menuItem.addMouseListener(this);
Таким образом, у вас есть доступ ко всем компонентам вашего класса, и вы можете получить доступ к вашему объекту JTextField.