java如何操作粘贴到JTextField中的文本,而不是键入的输入?
我的应用程序提供了将文本从JTextArea
复制到JTextField
的可能性(用作JComboBox
的编辑器组件,但我认为这无关紧要),并且我想提供在布尔条件为true
时删除前导和尾随空格的功能(例如,选中复选框)。在JTextField
中输入前导和尾随空格仍然是可能的,只有粘贴的文本应该按照描述进行操作
我添加了一个DocumentFilter
,但它同时响应类型化更改和粘贴的更改,并且我在其方法参数中找不到任何允许区分类型化插入和粘贴插入的条件。AKeyListener
不响应粘贴的更改
# 1 楼答案
侦听器不提供直接方法来确定输入是否来自粘贴操作。但我有一个简单的变通解决方案,可能会奏效
使用
DocumentListener
来检测JTextField
中的文本更改。如果检测到更改,请转至下一步从
Clipboard
对象中获取字符串文本比较
JTextField
中的文本和Clipboard
中的文本。如果字符串是相同的,我们假设已经发生了粘贴如果用户在文本字段中的现有文本之间粘贴一些文本,则可以获取插入符号位置,并从插入符号位置开始比较字符串
更新:
要从剪贴板读取:
# 2 楼答案
我从未尝试过,但也许你可以使用
EventQueue
类。具体来说,您可能可以使用getCurrentEvent()
方法我猜如果事件类型是
keyTyped
,那么它是通过在文本字段中键入来生成的如果使用键盘上的CTRL_V完成粘贴,或者单击进行粘贴的菜单项,则会生成其他事件
所以我猜您只需要检查事件是否为“KeyTyped”事件,并调用自定义粘贴逻辑