Получение действия после вставки текста в JTextComponent (Java) - PullRequest
1 голос
/ 02 июня 2010

Это действительно озадачивает меня.

У меня есть JTextComponent, для которого я добавил контекстное меню вырезать \ копировать \ вставить, щелкнув правой кнопкой мыши, с помощью JPopupMenu и DefaultEditorKit.Cut\Copy\PasteAction().

JMenuItem cutItem = new JMenuItem(new DefaultEditorKit.CutAction());
JMenuItem copyItem = new JMenuItem(new DefaultEditorKit.CopyAction());
JMenuItem pasteItem = new JMenuItem(new DefaultEditorKit.PasteAction());

Для каждого действия я добавил прослушиватель действий, который захватывает текст JTextComponent, который я хочу использовать в функции.

final ActionListener textFieldListener = new ActionListener() {
@Override public void actionPerformed(ActionEvent e){someGlobalFunction(textComponent.getText());
}
}; 

...

cutItem.addActionListener(textFieldListener );
copyItem.addActionListener(textFieldListener );
pasteItem.addActionListener(textFieldListener );

Тем не менее, единственный текст, за который я могу ухватиться - это строка, которой она была до Я вырезал \ вставлял в компонент, а не после.

Есть ли очевидное решение для этого?

Ответы [ 2 ]

1 голос
/ 02 июня 2010

Оберните код в методе actionPerformed () в SwingUtilities.invokeLater (...). Это добавит код в конец EDT, чтобы он выполнялся после команд вырезать / копировать / вставить.

0 голосов
/ 02 июня 2010

Это потому, что вы не слушаете свое текстовое поле, вы слушаете меню: -)

Поместите слушателя в ваше текстовое поле, или в документ вашего текстового поля, или, возможно, FilterDocument, или даже в ваш собственный документ.

...