【问题标题】:Cut and Paste in JTextArea在 JTextArea 中剪切和粘贴
【发布时间】:2010-02-05 10:31:06
【问题描述】:

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

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

【问题讨论】:

    标签: java swing jtextarea


    【解决方案1】:

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

    请参阅我的回答 here 以获取示例。

    【讨论】:

      【解决方案2】:

      听起来您需要使用DocumentListener 来跟踪更改。文档侦听器中的事件将告诉您在任何给定的更改中添加/删除了多少字符,并为您提供对支持文本区域的 Document 的引用。

      以下是名为textArea 的JTextArea 的示例文档侦听器实现:

      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】:

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

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

        【讨论】:

          猜你喜欢
          • 2021-06-24
          • 1970-01-01
          • 2018-03-17
          • 1970-01-01
          • 1970-01-01
          • 2019-05-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多