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

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

У меня есть 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 );

Однако единственный текст, который я могу удержать, — это строка, которая была до того, как я вырезал\вставил в компонент, а не после.

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


person Viktor Sehr    schedule 02.06.2010    source источник


Ответы (2)


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

person camickr    schedule 02.06.2010

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

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

person Istao    schedule 02.06.2010