Vertical scroll bar to the left of a ScrollPane in JavaFX

1

Using Java FX Is it possible to place the vertical scroll bar of scrollPane on the left?

    
asked by Oundroni 08.02.2016 в 18:09
source

2 answers

0

One possible solution is:

  • Create a ScrollBar
  • Associate with bind the ScrollBar with the ScrollPane
  • Hide the vertical scroll bar of ScrollPane
  • Here is a small functional example:

        import javafx.application.Application;
        import javafx.geometry.Orientation;
        import javafx.scene.Scene;
        import javafx.scene.control.ScrollBar;
        import javafx.scene.control.ScrollPane;
        import javafx.scene.layout.HBox;
        import javafx.scene.layout.Pane;
        import javafx.scene.layout.Priority;
        import javafx.scene.layout.VBox;
        import javafx.scene.shape.Line;
        import javafx.stage.Stage;
    
        public class ScrollbarIzquierda extends Application {
    
            @Override
            public void start(Stage stage) {
    
                Pane pane = new Pane();
                Line line = new Line(100, 100, 1000, 1000);
                pane.getChildren().add(line);
    
                ScrollPane scrollPane = new ScrollPane();
                scrollPane.setContent(pane);
    
                ScrollBar vScrollBar = new ScrollBar();
                vScrollBar.setOrientation(Orientation.VERTICAL);
                vScrollBar.minProperty().bind(scrollPane.vminProperty());
                vScrollBar.maxProperty().bind(scrollPane.vmaxProperty());
                vScrollBar.visibleAmountProperty().bind(scrollPane.heightProperty().divide(pane.heightProperty()));
                    scrollPane.vvalueProperty().bindBidirectional(vScrollBar.valueProperty());
    
                ScrollBar hScrollBar = new ScrollBar();
                hScrollBar.setOrientation(Orientation.HORIZONTAL);
                hScrollBar.minProperty().bind(scrollPane.hminProperty());
                hScrollBar.maxProperty().bind(scrollPane.hmaxProperty());
                hScrollBar.visibleAmountProperty().bind(scrollPane.widthProperty().divide(pane.heightProperty()));
                scrollPane.hvalueProperty().bindBidirectional(hScrollBar.valueProperty());
    
    scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
    
                HBox hBox = new HBox();
                HBox.setHgrow(scrollPane, Priority.ALWAYS);
                hBox.getChildren().addAll(vScrollBar, scrollPane);
    
                VBox vBox = new VBox();
                VBox.setVgrow(hBox, Priority.ALWAYS);
                vBox.getChildren().addAll(hScrollBar, hBox);
    
                Scene scene = new Scene(vBox, 500, 400);
                scene.getStylesheets().add(this.getClass().getResource("style.css").toExternalForm());
    
                stage.setScene(scene);
                stage.show();
    
                vScrollBar.requestLayout();
                hScrollBar.requestLayout();
            }
    
            public static void main(String[] args) {
                launch(args);
            }
        }
    

    And the CSS:

    .scroll-pane {
        -fx-background-insets: 0;
        -fx-padding: 0;
    }
    
    .scroll-pane:focused {
        -fx-background-insets: 0;
    }
    
    .scroll-pane .corner {
        -fx-background-insets: 0;
    }
    
        
    answered by 06.04.2016 / 09:38
    source
    2

    Unfortunately not, in a Scroll Pane , you can only manipulate properties of the Horizontal bars whose position is below and Vertical position right, which are the only ones implemented for this control.

        
    answered by 08.02.2016 в 18:35