Skip to Main Content

Java SE (Java Platform, Standard Edition)

Javafx pickOnBounds setting fails with SplitPane - can't click thru a transparent SplitPane

2636066May 13 2016 — edited May 13 2016

When I have a transparent SplitPane, setting pickOnBounds=false does not work, I cannot click on a button behind the splitpane. I have a splitPane with a transparent VBox with pickOnBounds=false I also set the splitpane with pickOnBounds=false, however a mouse click will not go thru to the button beneath them.

I have a button at the top that is partially covered by a SplitPane, There are buttons at the bottom that turn on/off mousetransparency and pickOnBounds.

When 'Enable MouseTransparency' is unchecked, and 'Enable Pick On Bounds' is unchecked, Then you should be able to click on the button that is behind the SplitPane, but you can't http://i.stack.imgur.com/TxUaC.png

Could it be that the skinclass of Splitpane is not inheriting the pickOnBounds setting???

Here is example code that illustrated the problem:

package  splitpaneprob;

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.geometry.Orientation;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.SplitPane;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

// Demonstrates the JavaFX node mouseTransparent and pickOnBounds properties.
// shows that 'PickOnBounds=false' does not work for a SplitPane that has a transparent background and you want mouseclicks to go thru
public class PickOnBoundsFails extends Application {
  
public static void main(String[] args) {
  launch
(args);
  
}

  
@Override
  
public void start(Stage stage) throws Exception {
  
ToggleButton testButton = new ToggleButton("");

  
VBox layer1 = new VBox();
  layer1
.getChildren().add(testButton);

  
SplitPane layer3 = new SplitPane();
  layer3
.setMaxWidth(140);

  layer3
.setOrientation(Orientation.VERTICAL);
  layer3
.setStyle("-fx-background-color:transparent;-fx-border-color:teal");
  layer3
.setPrefWidth(120);
  
VBox topItem = new VBox();
  topItem
.setPickOnBounds(false);
  topItem
.setPrefHeight(100);
  topItem
.setAlignment(Pos.BOTTOM_LEFT);
  
Button topButton = new Button();
  topButton
.setMouseTransparent(false);
  topItem
.getChildren().add(topButton);
  
VBox bottomItem = new VBox();
  
Button bottomButton = new Button("click me");
  bottomItem
.getChildren().add(bottomButton);
  layer3
.getItems().add(topItem);
  layer3
.getItems().add(bottomItem);

  
StackPane stack = new StackPane();

  stack
.getChildren().setAll(layer1, layer3);
  stack
.setStyle("-fx-background-color: azure;");

  
VBox layout = new VBox();
  layout
.getChildren().setAll(
  stack
,
  createControls
(testButton, layer3, topButton)
  
);

  stage
.setScene(new Scene(layout));
  stage
.show();
  
}

  
private VBox createControls(ToggleButton controlledButton, SplitPane controlledNode, Button buttonOnSplitPane) {
  controlledButton
.textProperty().bind(
  
Bindings
  
.when(controlledNode.mouseTransparentProperty()).then("Completely Clickable")
  
.otherwise(Bindings
  
.when(controlledNode.pickOnBoundsProperty()).then("Partially clickable")
  
.otherwise("Should Be fully Clickable")
  
)
  
);
  buttonOnSplitPane
.textProperty().bind(
  
Bindings
  
.when(controlledNode.mouseTransparentProperty()).then("NOT Clickable")
  
.otherwise("Clickable")
  
);
  
CheckBox enableMouseTransparency = new CheckBox("Enable MouseTransparency on ScrollPane");
  enableMouseTransparency
.setSelected(controlledNode.isMouseTransparent());
  controlledNode
.mouseTransparentProperty().bind(enableMouseTransparency.selectedProperty());

  
CheckBox enablePickOnBounds = new CheckBox("Enable Pick On Bounds on ScrollPane");
  enablePickOnBounds
.setSelected(controlledNode.isPickOnBounds());
  controlledNode
.pickOnBoundsProperty().bind(enablePickOnBounds.selectedProperty());

  
VBox controls = new VBox(10);
  controls
.setStyle("-fx-background-color: cornsilk; -fx-padding: 10;");
  controls
.getChildren().addAll(
  enableMouseTransparency
,
  enablePickOnBounds
  
);

  
return controls;
  
}
}

Post Details
Locked on Jun 10 2016
Added on May 13 2016
0 comments
731 views