2017-08-28 65 views
1

我的应用程序提供了将文本从JTextArea复制到JTextField(用作JComboBox的编辑器组件,但我认为没有关系)的可能性,并且我想提供删除前导和尾随空白(如果布尔值条件是true(例如复选框被选中)。输入JTextField的前导空白和尾随空白仍应该是可能的,只有粘贴的文本应该如上所述进行操作。如何操作粘贴到JTextField但未键入输入的文本?

我添加了一个DocumentFilter,但它响应了键入的更改和粘贴的更改,并且在其方法参数中找不到任何可以区分类型和粘贴插入的条件。 A KeyListener不响应粘贴的更改。

+0

所以你想区分JTextField中的粘贴动作和类型动作? – user3437460

回答

4

我在它的方法参数中找不到任何条件允许区分类型和粘贴插入。 KeyListener不响应粘贴的更改。

监听器不提供直接的方法来确定输入是否来自粘贴操作。但我有一个简单的解决方案,可以工作。

  1. 使用DocumentListener以检测在JTextField文本更改。如果检测到更改,请继续下一步。

  2. Clipboard对象中获取字符串文本。

  3. 比较JTextField内的文字和Clipboard的文字。如果字符串相同,我们假定粘贴已经发生。


如果用户粘贴一些文本之间在现有的文本框的文字,你可以插入符位置和比较,从开始插入位置的字符串。


更新:

从剪贴板阅读:

import java.awt.Toolkit; 
import java.awt.datatransfer.*; 

Clipboard cb=Toolkit.getDefaultToolkit().getSystemClipboard(); 
System.out.println(cb.getData(DataFlavor.stringFlavor)); 
0

我加入某个DocumentFilter,但既响应类型的变化和粘贴的变化,我不找其方法参数中的任何条件允许区分键入的类型和插入

我从来没有尝试过,但也许你可以使用EventQueue类。具体而言,您可能可以使用getCurrentEvent()方法。

我猜如果事件类型是keyTyped那么它是通过在文本字段中键入生成的。

如果粘贴是使用键盘上的CTRL_V完成的,或者如果您单击执行粘贴的菜单项,则会生成其他事件。

所以我想你只需要检查事件是不是“KeyTyped”事件并调用您的自定义粘贴逻辑。

+1

这不应该是一个评论?至少在确认之前,是吗? –

相关问题