2012-10-31 3 views
2

내용의 높이가 증가하면 ScrollPane 컨트롤을 자동 스크롤하는 방법이 있습니까? 예를 들어, 화면 하단 (ScrollPane 내부)에 TitledPane이 있고이를 확장하면 ScrollPane을 아래로 스크롤하여 TitledPane의 전체 내용을 볼 수 있습니다.JavaFX 자동 스크롤 스크롤 페어

답변

3

첫 번째 두 번째가 르페의 수직 이동 막대의 위치를 ​​설정하는 동시에 titledPane의 좌표를 얻을 수있다 titledPane.localToScene()scrollPane.setVvalue()

의 조합으로 그 동작을 달성 할 수있다. 범위는 0 - 1입니다.

+0

비슷한 문제가 있습니다. 제목이있는 창을 위/아래로 움직여야합니다. 어떻게해야합니까? 주로 IntelliJ 출력 창 기능을 구현하기가 어렵습니다. 그 창은 마우스로 위/아래로 움직일 수 있습니다. – alhelal

0

AnimationTimer를 사용하여 만들었습니다. ScrollPane이 확장 된 Titlepane에 반응했는지 확인하려면 100000000 나노 초 동안 기다려야했습니다.

public void scrollNodeInTopScrollPane(Node n, ScrollPane s) { 
    final Node node = n; 
    final ScrollPane clientTopScrollPane = s; 
    AnimationTimer timer = new AnimationTimer() { 
     long lng = 0; 
     @Override 
     public void handle(long l) { 
      if (lng == 0) { 
       lng = l;     
      }     
      if (l > lng + 100000000) {     
       if (node.getLocalToSceneTransform().getTy() > 20) {      
        clientTopScrollPane.setVvalue(clientTopScrollPane.getVvalue() + 0.05);       
        if (clientTopScrollPane.getVvalue() == 1) { 
         this.stop();       
        } 
       } else { 
        this.stop(); 
       } 
      }     
     } 
    }; 
    timer.start(); 
} 
1

수직 또는 수평 막대에 값을 전달하기 전에 스크롤 막대에 현재 좌표가 있어야합니다.

이 코드는 나를 위해 꽤 잘 작동 :

// the owner's node of your scrollPane; 
titledPane.layout(); 
// the maxValue for scrollPane bar (1.0 it's the default value) 
scrollPane.setVvalue(1.0d); 

당신은 당신의 스크롤이 성장 곳을 코딩해야합니다. 예를 들어, 스크롤 구획의 내부 노드에 노드를 추가하는 경우, 그 노드의 아이리스트에 청취자를 추가합니다.

scrollpane의 내부 노드의 높이가 변경되면, heightProperty에 리스너를 추가하십시오.

는 예를 들어, 스크롤의 내부 노드는은 AnchorPane 그리고 당신은 다음과 같이이 창에 노드를 추가, 그렇게 :

anchorPane.getChildren().addListener( 
    (ListChangeListener.Change<? extends Node> c) -> { 
     titledPane.layout(); 
     scrollPane.setVvalue(1.0d); 
    } 
); 

가 성장 높이라면 ...

heightProperty().addListener(
    (observable, oldValue, newValue) -> { 
     titledPane.layout(); 
     scrollPane.setVvalue(1.0d); 
    } 
); 

그게 전부 야!

10

내부 컨테이너의 heightPropertybindScrollPanevvalue 속성 일 수 있습니다. 예를 들어, ScrollPaneVBox이있는 경우 :

+0

와우 ...이 솔루션은 나를 위해 작동합니다. 하지만, 더 설명해 주시겠습니까? – Fadhil

+0

위쪽 표제 판을 숨 깁니다. – KeepMove