我想創建一個簡單的JavaFx類,向用戶顯示覆蓋用戶屏幕的半透明矩形(比如任意50%的透明度)。它應該簡單地讓我得到點擊鼠標點擊事件。這聽起來微不足道,但是當我創建透明窗口時,它們似乎對鼠標事件透明,而不僅僅是我對半透明可見性的要求。鼠標事件從未觸發。JavaFx透明窗口 - 是的請。鼠標透明 - 不,謝謝
我在矩形和根窗格上使用了setMouseTransparent(false),但這沒什麼區別。如果有人能指出任何錯誤/誤解,我會很感激。
下面是微不足道的測試類,我創建:
public class ClickScreen implements MouseListener {
private ClickScreenListener listener;
private Stage window;
private Point point;
public ClickScreen(ClickScreenListener listener) {
// Get screen size
Rectangle2D r = Screen.getPrimary().getBounds();
// Something to put stuff in
StackPane root = new StackPane();
// Translucent rectangle on the pane
Rectangle rectangle = new Rectangle(r.getWidth(), r.getHeight());
rectangle.setFill(Color.rgb(183, 183, 183, 0.5));
root.getChildren().add(rectangle);
Scene scene = new Scene(root, r.getWidth(), r.getHeight());
scene.setFill(null);
window = new Stage();
window.initStyle(StageStyle.TRANSPARENT);
window.setTitle("Click drop location");
window.setScene(scene);
this.listener = listener;
}
public Point getLocation(){
return point;
}
@Override
public void mouseClicked(MouseEvent e) {
point = e.getLocationOnScreen();
listener.screenClicked(point);
}
}
編輯: 透明度問題我遇到的一個簡單的例子是從這個世界,你好!例。當我將鼠標放在按鈕上時,點擊按鈕的機率爲50:50,或者單擊「通過」並將焦點放在底層窗口(通常是我的例子中的日食)。會愛你對此的想法。
public class HelloWorld extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World!");
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
scene.setFill(null);
primaryStage.setScene(scene);
primaryStage.initStyle(StageStyle.TRANSPARENT);
primaryStage.show();
}
}
你沒有連接你的listene到任何東西,像scene.setOnMouseClicked(聽衆)。查看[Handling JavaFX Events](http://docs.oracle.com/javafx/2/events/jfxpub-events.htm)以獲取更多詳細信息 – MadProgrammer