user16380
user16380

Reputation: 403

JavaFX 2.1 Change ScrollPane Scrollbar size

I am trying to figure out how to change a scrollpanes scrollbar size to make it wider in javafx 2.1.

Upvotes: 5

Views: 9355

Answers (3)

NebuCodeNezzar
NebuCodeNezzar

Reputation: 355

This worked for me, in reducing the width of the scrollbar thumb to be slimmer:

    -fx-scale-x: .6; /*Use your preferred value*/

Upvotes: 0

croset3
croset3

Reputation: 73

The following solution worked for me:

    @FXML
    private ScrollPane myScrollPane;

    // Where you need in your code do the following:
    Set<Node> nodes = myScrollPane.lookupAll(".scroll-bar");
    for (final Node node : nodes) {
        if (node instanceof ScrollBar) {
            ScrollBar sb = (ScrollBar) node;
            if (sb.getOrientation() == Orientation.VERTICAL) { // HORIZONTAL is another option.
                sb.setPrefWidth(40); // You can define your preferred width here.
            }
        }
    }

Upvotes: 2

jewelsea
jewelsea

Reputation: 159291

The ScrollBar width is based on the font size of the ScrollPane.

Set the font size of the ScrollPane to something big and (if needed) sent the font size of your the ScrollPane's content node back to something normal.

ScrollPane scrollPane = new ScrollPane();
scrollPane.setContent(content);
scrollPane.setStyle("-fx-font-size: 40px;");  // set the font size to something big.
content.setStyle("-fx-font-size: 11px;");     // reset the region's font size to the default.

Here is a complete executable example based on my answer to a previous forum question on the same topic.

import javafx.application.Application;
import javafx.collections.*;
import javafx.scene.*;
import javafx.stage.Stage;
import javafx.scene.chart.*;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.Region;

public class BigScrollBars extends Application {
  @Override public void start(Stage stage) {
    // create a chart.
    ObservableList<PieChart.Data> pieChartData =
      FXCollections.observableArrayList(
        new PieChart.Data("Grapefruit", 13),
        new PieChart.Data("Oranges", 25),
        new PieChart.Data("Plums", 10),
        new PieChart.Data("Pears", 22),
        new PieChart.Data("Apples", 30)
      );
    final PieChart chart = new PieChart(pieChartData);
    chart.setTitle("Imported Fruits");
    chart.setMinSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);
    chart.setPrefSize(800,600);

    // create a scrollpane.
    ScrollPane scrollPane = new ScrollPane();
    scrollPane.setContent(chart);
    scrollPane.setStyle("-fx-font-size: 40px;");  // set the font size to something big.
    chart.setStyle("-fx-font-size: 11px;");       // reset the region's font size to the default.

    // show the scene.
    stage.setScene(new Scene(scrollPane, 400, 300));
    stage.show();
  }

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

Upvotes: 5

Related Questions