4

我正在开发一个应用程序,它要求 JTextArea 中只有 165 个字符。我已经强加了这个条件。我使用了一个静态计数器来计算在 textarea 中输入的字符数,并且还编码以处理当用户从文本中删除任何字符串时的条件,计数器必须通过考虑所选字符串的长度来增加。

但是现在我想处理用户通过按“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 回答