Получение действия после того, как текст вставлен в JTextComponent (Java)

StackOverflow https://stackoverflow.com/questions/2960703

Вопрос

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

у меня есть JTextComponent Для которого я добавил меню с надписью правой кнопкой мыши Copy Paste, используя 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 );

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

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

Это было полезно?

Решение

Оберните код в метод ActionPerformed () в swingUtilities.invokelater (...), это добавит код в конце EDT, чтобы он должен выполнять после команд вырезания/копирования/вставки.

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top