在JTextArea中剪切和粘贴

4
我正在开发一个应用程序,需要在JTextArea中输入的字符数不超过165个。我已经设置了这个限制。我使用了一个静态计数器来计算输入到文本区域中的字符数,并编写了代码来处理用户从文本中删除任何字符串时必须考虑选定的字符串长度并递增计数器的情况。
然而,现在我想处理当用户执行“剪切”或“粘贴”操作(通过按下“Ctrl + X”和“Ctrl + V”)时的情况。我知道JTextArea中继承了默认的JTextComponent方法,但我想获取剪切文本并知道剪切文本的长度,以便通过适当的数量减少维护字符的计数器,并在粘贴时递增它。
3个回答

4
创建一个DocumentFilter并将其设置在新的PlainDocument上。使用此文档创建JTextArea。(或者在转换为AbstractDocument之后,使用JTextArea的默认文档)。请参见我的答案这里提供了一个示例。

3
听起来您需要使用DocumentListener 来跟踪更改。文档监听器中的事件将告诉您在任何给定更改中添加/删除了多少个字符,并为您提供支持文本区域的Document 的引用。
以下是一个示例文档监听器实现,适用于名为textAreaJTextArea:
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() );
  }
});

此监听器将检测剪切和粘贴以及按键操作。


3

阅读Swing教程中有关实现文档过滤器的部分,获取限制文本组件中字符数量的工作代码。

相比监听器,过滤器更可取,因为它可以防止文档被更新。如果使用监听器,则需要在文本超过限制时撤销更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接