2016-12-26 8 views
0

ステージにスクロールバーを追加する、ステージの右側にスクロールバーを固定したい、最初はCSSを使用してみたい"position:absolute"のようなスタイルを見つけられないので、ステージ上でChangeListenerを追加します。ステージのサイズが変更され、スクロールバーのLayoutXとLayoutYがリセットされ、うまく動作しますが、ステージを最大化すると、ステージ上のリスナーはjavaFXでステージの右側のスクロールバーを固定する方法

stage.heightProperty().addListener(new ChangeListener<Number>() 
      { 
       @Override 
       public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) 
       { 
        System.out.println("this is height,newValue:"+newValue.intValue()+"oldValue:"+oldValue.intValue()); 
       } 
      }); 

stage.maximizedProperty().addListener(new ChangeListener<Boolean>() { 
       @Override 
       public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) { 
        System.out.println("current height"+stage.heightProperty().doubleValue()); 
        System.out.println("current width"+stage.widthProperty().doubleValue()); 
       } 
      }); 

    stage.widthProperty().addListener(new ChangeListener<Number>() 
      { 
       @Override 
       public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) 
       { 
        hBox.setPrefWidth(newValue.intValue()-30); 
        table1HorizontalScrollBar = findScrollBar(table1, Orientation.HORIZONTAL); 
        table1VerticalScrollBar = findScrollBar(table1, Orientation.VERTICAL); 
        table2.setPrefWidth(newValue.intValue()-table1.getWidth()); 
        table2HorizontalScrollBar = findScrollBar(table2, Orientation.HORIZONTAL); 
        table2VerticalScrollBar = findScrollBar(table2, Orientation.VERTICAL); 
        bindValueProperty(); 
        System.out.println("this is width ,newValue:"+newValue.intValue()+"oldValue:"+oldValue.intValue()); 
       } 
      }); 

私は舞台を最大化し、コンソール出力は次のようになります。

the result on console

今、ステージの幅と高さのnewValueを取得できます。 が、ステージ上で、この

the positon of scrollbar

答えて

0

のような古い位置にまだスクロールは、ちょうどこの仕事のための正しいレイアウトを使用します。

@Override 
public void start(Stage primaryStage) { 
    ScrollBar scrollBar = new ScrollBar(); 
    scrollBar.setOrientation(Orientation.VERTICAL); 
    AnchorPane root = new AnchorPane(scrollBar); 
    AnchorPane.setTopAnchor(scrollBar, 0d); 
    AnchorPane.setRightAnchor(scrollBar, 0d); 
    AnchorPane.setBottomAnchor(scrollBar, 0d); 

    Scene scene = new Scene(root); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

または2つのScrollBar sのため:

@Override 
public void start(Stage primaryStage) { 
    ScrollBar vScrollBar = new ScrollBar(); 
    vScrollBar.setOrientation(Orientation.VERTICAL); 
    ScrollBar hScrollBar = new ScrollBar(); 
    hScrollBar.setOrientation(Orientation.HORIZONTAL); 

    Region r = new Region(); 
    r.setBackground(new Background(new BackgroundFill(Color.BLUE, CornerRadii.EMPTY, Insets.EMPTY))); 
    r.setBorder(new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, BorderWidths.DEFAULT))); 

    GridPane root = new GridPane(); 

    ColumnConstraints c1 = new ColumnConstraints(); 
    c1.setHgrow(Priority.ALWAYS); 
    ColumnConstraints c2 = new ColumnConstraints(); 
    c2.setHgrow(Priority.NEVER); 
    root.getColumnConstraints().addAll(c1, c2); 

    RowConstraints r1 = new RowConstraints(); 
    r1.setVgrow(Priority.ALWAYS); 
    RowConstraints r2 = new RowConstraints(); 
    r2.setVgrow(Priority.NEVER); 
    root.getRowConstraints().addAll(r1, r2); 
    root.addRow(0, r, vScrollBar); 
    root.add(hScrollBar, 0, 1); 

    Scene scene = new Scene(root); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
関連する問題