2017-08-28 9 views
1

私のアプリケーションでは、JTextAreaのテキストをJComboBoxのエディタコンポーネントとして使用されているJTextFieldにコピーすることができますが、それは問題ではないと私は想定しています)、ブール値の場合は先頭と末尾の空白を削除します条件はtrueです(例:チェックボックスがオンになっている)。 JTextFieldに先頭と末尾の空白を入力することは可能です。貼り付けられたテキストのみを説明どおりに操作する必要があります。JTextFieldに貼り付けたテキストは操作しますが、入力は入力しません。

私はDocumentFilterを追加しましたが、型付き変更と貼り付け変更の両方に応答し、貼り付けられた挿入と型付きの区別を可能にするメソッド引数には条件がありません。 KeyListenerは貼り付けた変更に応答しません。

+0

JTextFieldで貼り付けアクションとタイプアクションを区別したいのですか? – user3437460

答えて

4

タイプされた挿入とペーストされた挿入を区別できる条件はありません。 KeyListenerは貼り付けられた変更に応答しません。

リスナーは、入力がペースト・アクションから来ているかどうかを判断する直接の手段を提供していません。しかし、私はうまくいくかもしれない解決策の周りに簡単な仕事を持っています。

  1. JTextField内のテキストの変更を検出するためにDocumentListenerを使用してください。変更が検出された場合は、次の手順に進みます。

  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)); 
0

私はDocumentFilterを追加しましたが、それは、入力された変更と貼り付けられた変更の両方に応答して、私は見つけられません。そのメソッドの引数の中で、挿入された挿入と型付きを区別できる任意の条件

私はそれを試したことはありませんが、おそらくEventQueueクラスを使用することができます。具体的には、getCurrentEvent()メソッドを使用することができます。

イベントタイプがkeyTypedであれば、それはテキストフィールドに入力することによって生成されたと推測します。

キーボードからCTRL_Vを使用して貼り付けを行った場合、または貼り付けを行うメニュー項目をクリックした場合、他のイベントが生成されます。

イベントが "KeyTyped"イベントではないかどうかをチェックし、カスタムペーストロジックを呼び出す必要があると思います。

+1

これはコメントではありませんか?少なくともそれが確認されるまで、ええ? –

関連する問題