2015-04-06 81 views
1

我試圖通過代碼滾動包含XYChart的ScrollPaneJavaFX - 以編程方式滾動ScrollPane的約束條件

@FXML 
private ScrollPane graphSP; 

滾動它,例如,在half-way point作品與這個序列:

Stage stage = new Stage(); 
stage.show(); 
graphSP.setHvalue(.5); 

的問題是,如果我地方調用setHvalue()其他地方,它只是什麼都不做。

所以想知道,實際上導致ScrollPane滾動的約束是什麼?或者,在我的程序中,我可以在哪裏撥打setHvalue()

回答

0

在場景可見後,您需要設置ScrollPane的Hvalue/Vvalue,即stage.isShowing()爲true。

編輯

一種方式來調用它是stage.show()被稱爲後。

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     LineChart<Number, Number> chart = new LineChart<>(new NumberAxis(), new NumberAxis()); 
     ScrollPane scrollPane = new ScrollPane(chart); 
     primaryStage.setScene(new Scene(scrollPane, 300, 300)); 
     primaryStage.show(); 
     scrollPane.setVvalue(0.5); 
     scrollPane.setHvalue(0.5); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

但是,有些情況下,對舞臺的引用不可用。在這種情況下,您可以使用以下內容:

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     LineChart<Number, Number> chart = new LineChart<>(new NumberAxis(), new NumberAxis()); 
     ScrollPane scrollPane = new ScrollPane(chart); 
     primaryStage.setScene(new Scene(scrollPane, 300, 300)); 

     scrollPane.getScene().getWindow().showingProperty().addListener((observable, oldValue, newValue) -> { 
      if (newValue) { 
       scrollPane.setVvalue(0.5); 
       scrollPane.setHvalue(0.5); 
      } 
     }); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

這似乎不是那個答案。我在調試器中嘗試過,在調用setHValue()之前設置foo = graphSP.isShowing()。在它工作的情況下是這樣。在失敗的情況下也是如此。我試着添加這段代碼,所以基於一個監聽器:'graphSP.visibleProperty()。addListener(new ChangeListener){public void void changed aBoolean2){ System.out.println(「debug:changed」); } <--- println從未被調用過 – mechLearner

+0

我沒有要求用'isShowing()'屬性添加操作。後面的值是可見的,我之所以要檢查它,是因爲所有的高度和寬度都在'stage.show()'上操作。 – ItachiUchiha

+0

我的聽衆的想法是試圖確保我被調用來做滾動到正確的位置,但至少是我擁有它的方式,它沒有被調用,任何想法如何在正確的時間實際更新滾動位置(當舞臺是v像你說的那樣顯而易見? – mechLearner

相關問題