如何操作粘贴到JTextField中的文本,但不是键入输入?

时间:2017-08-28 23:22:07

标签: java swing textfield jtextfield

我的应用程序可以将文本从JTextArea复制到JTextField(用作JComboBox的编辑器组件,但我认为这并不重要)和如果布尔条件为true(例如,选中复选框),我想提供删除前导和尾随空格。仍然可以在JTextField中输入前导和尾随空格,只应按照描述操作粘贴的文本。

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

2 个答案:

答案 0 :(得分:4)

  

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

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

  1. 使用DocumentListener检测JTextField中的文字更改。如果检测到更改,请继续执行下一步。

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

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

  4. 如果用户在文本字段中的现有文本之间粘贴一些文本,您可以获得插入位置并从插入符号位置开始比较字符串。

    <强>更新

    从剪贴板中读取:

    import java.awt.Toolkit;
    import java.awt.datatransfer.*;
    
    Clipboard cb=Toolkit.getDefaultToolkit().getSystemClipboard();
    System.out.println(cb.getData(DataFlavor.stringFlavor));
    

答案 1 :(得分:0)

  

我添加了一个DocumentFilter,但是它响应了键入的更改和粘贴的更改,我在其方法参数中找不到任何条件,允许区分键入和粘贴的插入

我从未尝试过,但也许您可以使用EventQueue课程。具体来说,您可以使用getCurrentEvent()方法。

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

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

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