2014-07-17 3 views
4

테이블보기에 스크롤 막대가 있는지 여부를 확인하는 방법이 있습니까? (내가 아래 코드에서했던 것 이외) 나의 목표는 (테이블 위에) 테이블의 오른쪽에 두 개의 화살표 이미지 (옆 패널을 닫거나 열려면)를 배치하는 것이다. 하지만 나는 스크롤바 위에 놓고 싶지 않습니다. 테이블 내용은 검색 결과이므로 언젠가 스크롤 막대가 표시되고 그렇지 않은 경우가 있습니다. 항목이 충분하지 않은 경우. 테이블 뷰 항목이 변경 될 때마다 화살표의 위치를 ​​변경하고 싶습니다.JavaFx TableView에서 스크롤 막대가 표시되는지 확인하는 방법

이미 다음 솔루션을 시도했지만 그 결과 두 번째로 검색을 수행 할 때 화살표가 이동합니다. 동시성 문제처럼 보입니다. 테이블이 렌더링되기 전에 리스너 코드가 실행되는 경우와 같습니다.

해결 방법이 있습니까?

tableView.getItems().addListener((ListChangeListener<LogData>) c -> {  
// Check if scroll bar is visible on the table 
// And if yes, move the arrow images to not be over the scroll bar 
Double lScrollBarWidth = null; 
Set<Node> nodes = tableView.lookupAll(".scroll-bar"); 
for (final Node node : nodes) 
{ 
    if (node instanceof ScrollBar) 
    { 
     ScrollBar sb = (ScrollBar) node; 
     if (sb.getOrientation() == Orientation.VERTICAL) 
     { 
      LOGGER.debug("Scroll bar visible : {}", sb.isVisible()); 
      if (sb.isVisible()) 
      { 
       lScrollBarWidth = sb.getWidth(); 
      } 
     } 
    } 
} 

if (lLogDataList.size() > 0 && lScrollBarWidth != null) 
{ 
    LOGGER.debug("Must move the arrows images"); 
    tableViewController.setArrowsDistanceFromRightTo(lScrollBarWidth); 
} 
else 
{ 
    tableViewController.setArrowsDistanceFromRightTo(0d); 
}}); 

답변

2

TableView의 내부 구현에 의존하지 않는 것이 좋습니다. 그런 말로하면, 코드는 대개 잘 보입니다 (나는 an infinite scrolling example과 비슷한 일을했습니다).

그러나 주 창 크기가 변경되어 스크롤바가 나타날 수도 있습니다.

따라서 스크롤바의 visibilty 속성 변경 내용을 듣는 것이 좋습니다.

private ScrollBar getVerticalScrollbar() { 
    ScrollBar result = null; 
    for (Node n : table.lookupAll(".scroll-bar")) { 
     if (n instanceof ScrollBar) { 
      ScrollBar bar = (ScrollBar) n; 
      if (bar.getOrientation().equals(Orientation.VERTICAL)) { 
       result = bar; 
      } 
     } 
    }  
    return result; 
} 
... 
bar.visibleProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> { 
     // tableViewController.setArrowsDistanceFromRightTo(...) 
    } 
); 
관련 문제