2015-03-10 4 views
0

У меня есть TableView:JavaFX как добавить ChangeListener к автоматической прокрутки TableView

@FXML 
    private TableView<ThreadInfo> threadsTable; 

Класс ThreadInfo:

public class ThreadInfo { 

    private StringProperty threadFrom; 

    private StringProperty threadDate; 

    private StringProperty threadStatus; 

    private StringProperty threadTo; 

// getters, setters 

} 

Я пытаюсь добавить ChangeListener в автоматический режим прокрутки TableView вниз каждый раз, когда новый ThreadInfo объект добавлен в мой TableView. То, что я пробовал:

threadsTable.getItems().addListener(
       new ListChangeListener<ThreadInfo>() { 
        @Override 
        public void onChanged(
          javafx.collections.ListChangeListener.Change<? extends ThreadInfo> arg0) { 
         threadsTable.scrollTo(threadsTable.getItems().size()); 
        } 

       }); 

У него нет ошибок компиляции, но не работает. Я также пробовал с ChangeListener, но я получаю: метод addListener (ListChangeListener) в типе ObservableList не применим для аргументов (новый ChangeListener() {}).

+0

Это отлично работает для меня. Можете ли вы создать [MCVE] (http://stackoverflow.com/help/mcve), который реплицирует проблему? –

+0

Спасибо, это огромный проект. Трудно получить больше, чем я разместил :) Это работает и для меня, но только когда я прокручиваю таблицу вручную. Без моего действия это не сработает. У меня также есть второй способ, но работает же для меня:. \t threadsTable.accessibleRoleProperty() AddListener ( \t \t \t \t новый ChangeListener () { \t \t \t \t \t @Override \t \t \t \t \t public void changed (ObservableValue arg0, \t \t \t \t \t \t \t Объект арг1, объект арг2) {\t \t \t \t \t \t threadsTable.scrollTo (threadsTable.getItems() размер() - 1). \t \t \t \t \t} \t \t \t \t}); – RichardK

+0

Не публикуйте свой проект. Создайте пример с нуля, который реплицирует проблему. –

ответ

0

Я нашел свою проблему. Оба метода делает работу:

threadsTable.getItems().addListener(
       new ListChangeListener<ThreadInfo>() { 
        @Override 
        public void onChanged(
          javafx.collections.ListChangeListener.Change<? extends ThreadInfo> arg0) { 
         threadsTable.scrollTo(threadsTable.getItems().size()); 
        } 

       }); 

И:

threadsTable.accessibleRoleProperty().addListener(
      new ChangeListener<Object>() { 

       @Override 
      public void changed(ObservableValue<? extends Object> arg0, 
        Object arg1, Object arg2) { 
       threadsTable.scrollTo(threadsTable.getItems().size()-1); 
      } 
     }); 

Проблема заключается в том, что я ставлю около 1k или более записи в мой TableView и это лаг. В небольших списках он отлично работает.

Смежные вопросы