JavaFX - 自定义ListCell中的不同布局

时间:2016-08-19 05:46:57

标签: java javafx chat javafx-8

我正在使用JavaFX构建聊天应用。现在,对于聊天消息显示,我使用一个简单的 id name date 1 prabhat 22-12-1989 2 Ashok 20-12-1978 3 prabhat 22-12-1986 4 Ashok 20-12-1974 5 prabhat 22-12-1889 6 Ashok 20-12-1900 ListView个自定义单元格工厂ChatItem

ChatCell可以是ChatItem(服务器公告,状态更改等),也可以是ChatLabel(由自己或其他方发送的消息)。 ChatMessage可以展开以显示各种内容(目前仅ChatMessageChatTextMessage

我的自定义单元格会检查项目的类型/特征,并相应地提供正确的视图。

我想在聊天气泡右下角的每个ChatImageMessage视图上显示时间戳。但如果文本只有一行,我希望时间戳显示在文本右侧的额外空格上。 (有点像WhatsApp聊天或大多数聊天应用程序)。

这是一个演示:

我当前的实现(在演示中显示)使用ChatMessage中的布尔属性来确定视图是否应该是多行的。它会在每次更新时检查它。我还添加了一个ChatMessage宽度的监听器,并在它发生变化时调用ListView。所有这一切似乎都过分了。我不认为在“模型”中添加“视图相关”属性是一个很好的设计。更不用说在第一项更新时,由于某种原因,时间戳不在正确的位置。

我该如何正确地做到这一点?

更新1: 我为refresh()项添加了一个属性提取器,并为宽度更改调用ListView的{​​{1}}宽度添加了一个侦听器。现在我不必致电ListView

这是updateItem类:

refresh()

0 个答案:

没有答案