我正在創建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