0

How can I keep an element always visible even after scrolling in a scrollPane, that means the node should be immovable after a horizontal scrolling.its position should be fixed. I have tried this but it doesn't work for my case , the elements still moving with scrolling, I'm adding a scrollPane which contains all the elements to an AnchorPane.

Community
  • 1
  • 1
Ines
  • 3
  • 1
  • 4

1 Answers1

0

Just use a stack pane and add the fixed elements after the ScrollPane. Depending on what scrolling you do not want to allow just comment out the "scrollProperty" listener that I added - if you want the element completely fixed - remove them both:

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application {

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

    @Override
    public void start(Stage primaryStage) throws Exception {

        StackPane root = new StackPane();
        root.setAlignment(Pos.TOP_LEFT);

        ScrollPane scrollPane = new ScrollPane();
        Pane pane = new Pane();
        pane.setMinHeight(1000);
        pane.setMinWidth(1000);
        scrollPane.setContent(pane);

        root.getChildren().add(scrollPane);
        Label fixed = new Label("Fixed");
        root.getChildren().add(fixed);

        // Allow vertical scrolling of fixed element:
        scrollPane.hvalueProperty().addListener( (observable, oldValue, newValue) -> {
            double xTranslate = newValue.doubleValue() * (scrollPane.getViewportBounds().getWidth() - fixed.getWidth());
            fixed.translateXProperty().setValue(-xTranslate);
        });
        // Allow horizontal scrolling of fixed element:
        scrollPane.vvalueProperty().addListener( (observable, oldValue, newValue) -> {
            double yTranslate = newValue.doubleValue() * (scrollPane.getViewportBounds().getHeight() - fixed.getWidth());
            fixed.translateYProperty().setValue(-yTranslate);
        });

        Scene scene = new Scene(root, 500, 500);

        primaryStage.setScene(scene);
        primaryStage.show();
    }
}
JohnRW
  • 748
  • 7
  • 22