如何将 JTextArea 的内容存储到 class 中?

How to store the content of a JTextArea into a class?

我正在开发一个程序,用作假设的电子邮件系统,可以在其中创建用户并向已创建的其他用户发送消息。

消息将存储在 "Message" class 中,文本在 GUI 中的 JTextArea 中键入。我想知道的是我将如何以完全相同的布局(缩进和所有)在 Message class 中存储输入到 JTextArea 中的文本。我考虑过文本文件,但是每条消息都必须有一个,可能会创建无限数量的文本文件,而且我不喜欢必须创建一个系统来为每个文本文件提供唯一名称的概念。

你能给我一些建议吗?

只需实施 DocumentListener interface,然后执行以下操作:

JTextArea someMessage = new JTextArea();
someMessage.getDocument().addDocumentListener(new MyDocumentListener());
someMessage.getDocument().putProperty("name", "Text Area");

这里,我们假设你实现的监听器的名字叫MyDocumentListener,实现可以很简单:

class MyDocumentListener implements DocumentListener {
    String newline = "\n";
 
    @Override
    public void insertUpdate(DocumentEvent e) {
        updateLog(e, "inserted into");
    }

    @Override
    public void removeUpdate(DocumentEvent e) {
        updateLog(e, "removed from");
    }

    @Override
    public void changedUpdate(DocumentEvent e) {
        //Plain text components do not fire these events
    }

    public void updateLog(DocumentEvent e, String action) {
        Document doc = (Document)e.getDocument();
        int changeLength = e.getLength();
        displayArea.append(
            changeLength + " character" +
            ((changeLength == 1) ? " " : "s ") +
            action + doc.getProperty("name") + "." + newline +
            "  Text length = " + doc.getLength() + newline);
    }
}

示例取自 Oracle website。我建议阅读该文章的其余部分,因为它深入探讨了如何有效地监听内部文档模型的更新。

如何获取插入的文本

insertUpdate is what notifies you when new text has been typed into the textarea. You can get the freshly inserted text by calling off to the DocumentEvent#getOffset and DocumentEvent#getLength。使用这两种方法,您可以获得文档中发生插入的偏移量(索引),以及更改的长度。 然后要获得插入的实际文本,您调用 DocumentEvent#getDocument#getText 并提供您从事件中获得的偏移量和长度。

如何获取textarea中的所有文字

您可以使用类似的方法通过 Document#getStartPosition and Document#getEndPosition, then calling Document#getText.

获取文档中的整个文本

或者更简单,JTextArea#getText