2010-02-05 121 views
4

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

但是现在我想通过按'Ctrl + X'和'Ctrl + V'来处理用户执行“剪切”或“粘贴”选项时的情况。我知道JTextComponent的默认方法是在JTextArea中继承的,但我想获取剪切文本并知道剪切文本的长度,以减少为字符维护的计数器,并在粘贴适当的数量时递增计数器。

+0

感谢你们所有人! – Supereme 2010-02-06 17:58:12

回答

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()); 
    } 
}); 

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

+0

非常感谢! :)问题终于解决了! – Supereme 2010-02-06 04:30:15

4

创建一个DocumentFilter并将其设置为一个新的PlainDocument。使用此文档来创建JTextArea。 (或者在转换为AbstractDocument之后使用JTextArea的默认文档)。

查看我的回答here的样本。

3

阅读有关Implementing a Document Filter的Swing教程中有关限制文本组件中字符数的工作代码部分。

过滤器优于侦听器,因为它可以防止更新文档。如果您使用侦听器,则当文本超出限制时,您需要撤消更改。