Сделать прямоугольник прозрачным

Мне нужно сделать нарисованную прямоугольную мышь прозрачной, чтобы видеть рабочий стол. Следующий код рисует мой прямоугольник. Что я должен добавить, чтобы получить это? Спасибо за помощь

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();
}

person Stéphane GROSSMANN    schedule 06.10.2014    source источник
comment
Вы можете уточнить? Если вы хотите видеть рабочий стол, вам нужно, чтобы окно было прозрачным, но, возможно, вы имеете в виду не это?   -  person James_D    schedule 07.10.2014


Ответы (3)


Поскольку график экрана в JavaFX имеет иерархическую структуру, для отображения рабочего стола вам также необходимо сделать Stage и Scene прозрачными и использовать форму "арифметика":

@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();
}

Позже вы можете добавить функцию перетаскивания на панель/группу.

person Uluk Biy    schedule 07.10.2014
comment
Спасибо за помощь. Функция перетаскивания — моя следующая цель. Должен ли я открыть новый вопрос, потому что я не могу его получить? - person Stéphane GROSSMANN; 08.10.2014
comment
@StéphaneGROSSMANN см. этот ответ для подсказки. Если это не поможет, да, вы можете открыть новый вопрос. - person Uluk Biy; 08.10.2014
comment
Я поместил это stackoverflow.com/questions/26254354/ Но нет ответа :-( все равно спасибо - person Stéphane GROSSMANN; 08.10.2014

Если вы просто хотите, чтобы внутренняя часть прямоугольника была прозрачной, все, что вам нужно, это

rect.setFill(Color.TRANSPARENT);

но я не совсем уверен, что это то, что вы имеете в виду.

person James_D    schedule 06.10.2014

Если я правильно вас понимаю, поскольку я не понимаю, что эта мышь является частью «прозрачной мыши нарисованного прямоугольника» - ваш прямоугольник должен быть прозрачным?

Вы должны изменить непрозрачность прямоугольника: rect.opacityProperty().set(0.5);

person Kamil Janyga    schedule 06.10.2014
comment
если вы имеете в виду это: rect.setStroke(new javafx.scene.paint.Color(0, 0, 0, 0)); превращает его в черный - person Stéphane GROSSMANN; 06.10.2014
comment
С 1 прямоугольник тоже черный :-( - person Stéphane GROSSMANN; 06.10.2014
comment
Проверьте отредактированный ответ. :) К сожалению, вы не можете просто применить прозрачный цвет. Вы должны указать альфа-канал прямоугольника (странно, странно...). Таким образом, ближе к 0.0 более прозрачный, 1.0 — плотный. - person Kamil Janyga; 06.10.2014
comment
Большой ! Это то, что я хотел. Большое спасибо :-) - person Stéphane GROSSMANN; 07.10.2014