4

JTextAreaに165文字しか含まれないアプリケーションを開発しています。私はその条件を課しました。テキストエリアに入力された文字数をカウントするために静的カウンターを使用し、ユーザーがテキストから文字列を削除したときの条件を処理するようにコーディングしました。カウンターは、選択した文字列の長さを考慮してインクリメントする必要があります。

ただし、ユーザーが「Ctrl+X」および「Ctrl+V」を押して「切り取り」または「貼り付け」オプションを実行したときの条件を処理したいと思います。JTextComponentのデフォルトメソッドがJTextAreaに継承されていることは知っていますが、文字用に維持されているカウンターをデクリメントし、適切な量だけ貼り付けながらインクリメントするために、カットテキストを取得してカットテキストの長さを知りたいです。

4

3 に答える 3

4

を作成DocumentFilterし、新しいに設定しますPlainDocument。このドキュメントを使用してを作成しJTextAreaます。(または、AbstractDocumentにキャストした後、JTextAreaのデフォルトドキュメントを使用します)。

サンプルについては、ここで私の答えを参照してください。

于 2010-02-05T12:15:56.980 に答える
3

DocumentListener変更を追跡するために使用する必要があるようです。ドキュメントリスナーのイベントは、特定の変更で追加/削除された文字数を示しDocument、テキスト領域を支える文字への参照も提供します。

JTextArea以下は、呼び出された場合のドキュメントリスナーの実装例ですtextArea

textArea.getDocument().addDocumentListener( new DocumentListener() {
  public void changedUpdate( DocumentEvent e )
  {
  }

  public void insertUpdate( DocumentEvent e )
  {
    System.out.println( "insertUpdate: Added " + e.getLength() + 
        " characters, document length = " + e.getDocument().getLength() );
  }

  public void removeUpdate( DocumentEvent e )
  {
    System.out.println( "removeUpdate: Removed " + e.getLength() +
        " characters, document length = " + e.getDocument().getLength() );
  }
});

このリスナーは、キーの押下だけでなく、カットアンドペーストも検出します。

于 2010-02-05T11:12:39.997 に答える
3

テキストコンポーネントの文字数を制限するコードを機能させるためのドキュメントフィルターの実装に関するSwingチュートリアルのセクションをお読みください。

フィルタは、ドキュメントが更新されないようにするため、リスナーよりも適しています。リスナーを使用する場合、テキストが制限を超えたときに変更を元に戻す必要があります。

于 2010-02-05T15:31:18.103 に答える