2016-01-12 5 views
2

Я хотел бы использовать приведенный ниже код для синхронизации полос прокрутки.Вызов поиска в инициализации перед рендерингом сцены

Node n1 = listView1.lookup(".scroll-bar"); 
if (n1 instanceof ScrollBar) { 
    final ScrollBar bar1 = (ScrollBar) n1; 
    Node n2 = listView2.lookup(".scroll-bar"); 
    if (n2 instanceof ScrollBar) { 
     final ScrollBar bar2 = (ScrollBar) n2; 
     bar1.valueProperty().bindBidirectional(bar2.valueProperty()); 
    } 
} 

Я хотел бы запустить эти строки кода внутри Initialize() метода сцены. К сожалению, эти строки кодов требуют, чтобы сцена была визуализирована. Есть ли способ запускать эти строки после рендеринга сцены без ввода пользователем?

ответ

1

Это некрасиво хак, кажется, работает:

public class Controller { 

    @FXML 
    private ListView<String> listView1 ; 
    @FXML 
    private ListView<String> listView2 ; 

    @FXML 
    private Parent root ; 

    public void initialize() { 
     root.sceneProperty().addListener((obs, oldScene, newScene) -> { 
      if (newScene != null) { 
       root.applyCss(); 
       Node n1 = listView1.lookup(".scroll-bar"); 
       System.out.println(n1); 
       if (n1 instanceof ScrollBar) { 
        final ScrollBar bar1 = (ScrollBar) n1; 
        Node n2 = listView2.lookup(".scroll-bar"); 
        System.out.println(n2); 
        if (n2 instanceof ScrollBar) { 
         final ScrollBar bar2 = (ScrollBar) n2; 
         bar1.valueProperty().bindBidirectional(bar2.valueProperty()); 
        } 
       } 

      } 
     }); 

    } 
}