JavaFX:如何在某种文本区域中存储和格式化多个段落?

标签 java javafx formatting chat

我目前正在创建一个小型聊天程序(主要是为了获得一些RMI和JavaFX的经验)。聊天本身已经完成,现在我正在开发 GUI。 我希望每条聊天消息都打印在类似于此的某种文本区域中:

爱丽丝<19:21:35>:世界你好!

这些是我的问题:

  1. 为此使用什么 JavaFX 类?我发现一个名为 TextFlow 的类似乎能够执行我想要的操作,但我现在还不明白它到底是如何工作的。或者一个简单的 TextArea 就足够了?
  2. 如何在一行内使用不同的格式?使用 HTML?
  3. 我应该如何将收到的短信保留在客户端中?只是总是将它们附加到文本区域(并让 GUI 隐式保存它们)?或者我应该使用某种 ObservableList 来缓冲消息并且文本区域与其同步?

消息作为 Message 对象接收。这些对象基本上只存储用户名、消息和时间戳;它们每个都有一个单独的属性。

最佳答案

最简单的方法是通过 TextArea,尽管不会有任何简洁的文本格式,但它看起来就像一个平淡的记事本之类的程序。我建议使用垂直框和文本。一个VBox可以用来存储所有的文本,并且您可以将VBox放在ScrollPane中以进行滚动。然后,对于每条消息,放置一个由 3 个文本组成的 HBox。这是一个例子

//Put this method in your Application class
public static void addMessage(Message message){
    Text username = new Text(message.getUsername());
    username.setFont(Font.font("Verdana", FontWeight.BOLD, 14));
    Text date = new Text(message.getTimestamp());
    date.setFont(Font.font("Verdana", FontWeight.ITALIC, 12));
    date.setFill(Color.GRAY);
    Text message = new Text(message.getMessage());
    date.setFont(Font.font("Courier New", 12));
    mainBox.getChildren().Add(new HBox(username, date, message)); //mainBox being a VBox that stores all your HBoxes. 
}

显然,请更改此内容以满足您的需求,并请更改样式。我只是举了一个例子。这就是我之前所做的,通过正确的样式,它看起来比仅仅放在 TextArea 上要好得多。

关于JavaFX:如何在某种文本区域中存储和格式化多个段落?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38598020/

相关文章:

java - 表达式与文字 && 表达式与语句

java - EventHandler 作为匿名内部类实现

JavaFX 60 fps 帧速率上限不起作用

c - 在 C 中格式化日历

java - 使用线程删除位置更新

从SVN到服务器: How to compile automatically?上的Tomcat的Java类文件

java - 如何在 JNI 环境的 native 端正确同步线程?

opencv - 如何在 IntelliJ IDEA 2022.1.1(社区版)上将 OpenCV 导入到 JavaFX(非模块化项目)?

c# - 在 C# 中的字符串中找到 {0} 是什么意思?

svn - 格式化 svn 日志输出