2017-08-28 66 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

這不應該是一個評論?至少在確認之前,是嗎? –

相關問題