Search code examples
javajavafx-8stagescene

Make Rectangle transparent


I need to make a drawn rectangle mouse transparent, in order to see the desktop. The following code draws my rectangle. What should I add to get that ? Thanks for help

public void start(Stage primaryStage) {
    Group group = new Group();

    Rectangle rect = new Rectangle(20,20,200,200);

    rect.setArcHeight(15);
    rect.setArcWidth(15);

    rect.setStroke(Color.BLACK);
    group.getChildren().add(rect);

    Scene scene = new Scene(group, 300, 200);
    primaryStage.setScene(scene);
    primaryStage.show();
}

Solution

  • Since the screen graph in JavaFX is in a hierarchical structure, to show desktop you need to also make the Stage and Scene transparent, and use shape "arithmetic":

    @Override
    public void start(Stage stage) {
        Group group = new Group();
        Rectangle rect = new Rectangle(0, 0, 350, 300);
        Rectangle clip = new Rectangle(20, 20, 200, 200);
        clip.setArcHeight(15);
        clip.setArcWidth(15);
    
        Shape shape = Shape.subtract(rect, clip);
    
        shape.setFill(Color.GRAY);
        group.getChildren().add(shape);
        Scene scene = new Scene(group);
        scene.setFill(Color.TRANSPARENT);
        stage.initStyle(StageStyle.TRANSPARENT);
        stage.setScene(scene);
        stage.show();
    }
    

    Later you can add draggable feature to the pane/group.