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

Java 如何将JTextArea的内容存储到类中?,java,swing,jtextarea,Java,Swing,Jtextarea,我正在开发一个程序,作为一个假设的电子邮件系统,在这个系统中可以创建用户,并可以向其他已创建的用户发送消息 消息将存储在消息类中,文本在GUI的JTextArea中键入。我想知道的是如何将键入的文本存储在消息类中的JTextArea中,以完全相同的布局缩进和所有缩进。我考虑过文本文件,但是每个消息都必须有一个,可能会产生无限多的文本文件,我不喜欢必须为每个文本文件创建一个唯一名称的系统的概念 您能给我一些建议吗?只需执行,然后执行以下操作: JTextArea someMessage = new

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

消息将存储在消息类中,文本在GUI的JTextArea中键入。我想知道的是如何将键入的文本存储在消息类中的JTextArea中,以完全相同的布局缩进和所有缩进。我考虑过文本文件,但是每个消息都必须有一个,可能会产生无限多的文本文件,我不喜欢必须为每个文本文件创建一个唯一名称的系统的概念

您能给我一些建议吗?

只需执行,然后执行以下操作:

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);
    }
}
从中选取的例子。我建议阅读这篇文章的其余部分,因为它深入探讨了如何有效地侦听内部文档模型的更新

如何获取插入的文本 是在文本区域中键入新文本时通知您的内容。您可以通过调用和来获取新插入的文本。使用这两种方法,您可以获得文档中插入位置的偏移量索引以及更改的长度。 然后,为了获得插入的实际文本,您调用并提供从事件中获得的偏移量和长度

如何获取文本区域中的所有文本 通过使用and,然后调用,可以使用类似的方法获取文档中的整个文本


甚至更简单,

这很好,但我困惑的是getDocument如何工作。比如,我如何存储MyDocumentListener解释的内容?@pcresft getDocument返回textarea的内部文档模型。这是跟踪TextArea中文本的数据结构,我想说的是,这一切似乎都存储在JTextArea中。但我想将内容存储在我创建的一个名为Message的类中。我想我可以在消息的每个实例中存储一个JTextArea,但我注意到getDocument返回了一个我以前从未听说过的文档。是否有办法将文档添加到JTextArea?我正在尝试确定如何将文档内容复制到不同的JTextArea。@pcreaff,我刚才描述了其中一种方法。阅读这些链接,你将很好地跟踪网站中的每一个变化Textarea@PCRevolt,如果您不一定要使用swing,我将推荐Javafx,因为这类问题只是在Javafx中执行myCustomData.textProperty.bindmyTextarea.textProperty的问题。JavaFx与swing编程非常不同,因此只有在不受时间限制的情况下才切换getText是否有问题,或者我是否在question@MadProgrammer,这让我咯咯笑了起来,摇了摇头。我自己完全没有想到文本文件,但是每封邮件都必须有一个文本文件,可能会产生无限多的文本文件——为什么要尝试重新发明轮子呢?这类问题很久以前就得到了专家们的回答——使用数据库。我相信JComponent实现了可序列化,为什么不检查序列化是否可行@MadProgrammer我认为问题在于OP想要保存JTextArea除了文本之外的其他属性,比如格式化。@ostrichofevil所以,只需使用getText-它将以与JTextArea中显示的相同格式返回文本:P