[英]JavaFX scroll to bottom of tableview when items are added to it
這里很奇怪,我不太想知道如何解決這個問題。 我有一個tableview,當可觀察列表的偵聽器選擇發生變化時,該表就會填充。 所以這是代碼:
userController.getAuthImpl().listOfMessages.addListener(new ListChangeListener<Message>() {
@Override
public void onChanged(ListChangeListener.Change<? extends Message> c) {
addMessageToTableView(tblvwBottomAdminNotifications, c.getList());
}
});
public void addMessageToTableView(TableView<Message> tblvw, ObservableList<? extends Message> observableList){
tblvw.getItems().clear();
for(Message msg: observableList)
tblvw.getItems().add(msg);
}
public ObservableList<Message> listOfMessages = FXCollections.observableArrayList(_listOfMessages);
這可以正常工作,並且一旦將項目添加到listOfMessages,表就會自動更新。 我現在想做的是在更新列表視圖時將其滾動到底部。 我嘗試將以下行添加到addMessageToTableView方法:
tblvw.scrollTo(tblvw.getItems().size()-1);
並且還嘗試像這樣將更改偵聽器添加到tableview本身:
tblvwBottomAdminNotifications.getItems().addListener(new ListChangeListener<Message>(){
@Override
public void onChanged(javafx.collections.ListChangeListener.Change<? extends Message> c) {
tblvwBottomAdminNotifications.scrollTo(c.getList().size()-1);
}
});
但是,以下消息均以相同方式出錯:
線程“ RMI TCP Connection(1)-192.168.56.1”中的異常java.lang.IllegalStateException:在FX應用程序線程上不存在; currentThread = RMI TCP連接(1)-192.168.56.1
我的Google技能是JavaFX抱怨我從一個單獨的線程訪問tableview。 我能理解,但是我應該如何以這樣的方式訪問它:當tableview確實添加了新項目時,它會向下滾動到它?
如果您需要更多信息,請與我們聯系。
怎么樣
Platform.runLater( () -> tblvw.scrollTo(c.getList().size()-1) );
您可以在表視圖本身的“項目”列表中添加一個changelistener,以便在更新時可以被動地滾動自身?
tblvw.getItems().addListener(new ListChangeListener<Message>(){
@Override
public void onChanged(javafx.collections.ListChangeListener.Change<? extends Message> c) {
tblvw.scrollTo(c.getList().size()-1);
}
});
因此,您無需將其添加到tblvwBottomAdminNotifications中,而是將其直接添加到tblvw中。 當該表視圖更新時,它將在其偵聽器中調用onChanged方法,並滾動到列表的底部。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.