我正在创建highlighting communication logger,它使用ListView
在单个单元格中显示每条消息。使用自定义列表单元格时的JavaFX ListView呈现错误
它基本的工作原理,但是当我滚动速度非常快上下,奇怪的事情发生了。正如你所看到的,我突出显示了当前选中的单元格和鼠标所在的单元格。在我上下滚动后,突出显示的单元格不是我的鼠标指针所在的单元格,对于某些单元格,我无法通过单击来选择它们。
我能够通过一个非常简单的例子重现这一点。假设我们有一个ListView
的字符串,用自定义的MyListCell
's渲染那些使用TextFlow
的单元格。的MyListCell
的updateItem
方法看起来像这样
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
setText(null);
setGraphic(null);
return;
}
TextFlow textFlow = new TextFlow(new Text(item));
setGraphic(textFlow);
setText(null);
}
在初始化我只是创建一个新的字符串观察到的阵列和我相应地设置电池工厂:
public ObservableList<String > content = FXCollections.observableArrayList();
public ListView<String> listView;
@Override
public void initialize(URL location, ResourceBundle resources) {
listView.setCellFactory(cb -> new MyListCell());
listView.setItems(content);
/* ... /*
完整的工作示例代码只由一些文件(您需要调整包路径):
问:任何人都可以确认此行为,并告诉我什么,我做错了什么?
我的系统是Ubuntu的14.04与Oracle JDK 1.8.0_25
另一个发现:当我更换带有一个简单的'HBox'的'TextFlow',那么似乎我不能重现这个问题。 – halirutan