Получение действия после того, как текст вставлен в JTextComponent (Java)
-
23-10-2019 - |
Вопрос
Это действительно озадачивает меня.
у меня есть 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, или даже ваш собственный документ.