我正在开发一个程序,作为一个假设的电子邮件系统,用户可以在其中创建并可以向已创建的其他用户发送消息。
消息将存储在“Message”类中,文本在GUI中的JTextArea中键入。我想知道的是如何在Message类中以完全相同的布局(缩进和所有)存储键入JTextArea的文本。我考虑过文本文件,但是每个消息都必须有一个,可能会创建无限数量的消息,而且我不喜欢必须使系统为每个文本文件提供唯一名称的概念。
你能给我一些建议吗?
答案 0 :(得分:1)
只需实施DocumentListener
interface,然后执行以下操作:
.content {
max-height: 120px;
position: relative;
overflow: hidden;
}
.content .overlay {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
text-align: center;
margin: 0; padding: 30px 0;
background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));
}
在这里,我们假设您实现的侦听器的名称称为JTextArea someMessage = new JTextArea();
someMessage.getDocument().addDocumentListener(new MyDocumentListener());
someMessage.getDocument().putProperty("name", "Text Area");
,实现可能很简单:
MyDocumentListener
取自Oracle website的例子。我建议阅读该文章的其余部分,因为它深入探讨了如何有效地监听内部文档模型的更新。
insertUpdate
会通知您。您可以通过致电DocumentEvent#getOffset
和DocumentEvent#getLength
来获取新插入的文字。使用这两种方法,您可以获得插入发生的文档中的偏移量(索引)以及更改的长度。
然后,要获取插入的实际文本,请调用DocumentEvent#getDocument#getText
并提供从事件中获得的偏移量和长度。
您可以使用此类似方法,通过使用Document#getStartPosition
和Document#getEndPosition
,然后调用Document#getText
来获取文档中的整个文本。
或者更简单,JTextArea#getText