我正在尝试创建一个透明的锚点窗格,但您可以在同一时间拖动它。
我将舞台设置为透明,我为场景提供透明填充,然后在窗格上设置OnMousePressed
等。
该程序对我来说非常奇怪。透明度有一定的阈值:如果低于此阈值,窗格将不会捕获鼠标事件。如果超过,那就会。
我举个例子。当我写这个例子时,我发现这里的阈值在0.5到0.6之间。这意味着:如果我将填充的透明度设置为0.5或更低,则窗口将不可拖动,如果为0.6或更高,它将是。
我的测试代码:
public class Main extends Application {
Stage primaryStage;
class Delta {
double x, y;
}
final Delta dragDelta = new Delta();
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
primaryStage.initStyle(StageStyle.TRANSPARENT);
showMain();
}
public void showMain() {
AnchorPane ap = new AnchorPane();
ap.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
dragDelta.x = primaryStage.getX() - mouseEvent.getScreenX();
dragDelta.y = primaryStage.getY() - mouseEvent.getScreenY();
}
});
ap.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
primaryStage.setX(mouseEvent.getScreenX() + dragDelta.x);
primaryStage.setY(mouseEvent.getScreenY() + dragDelta.y);
}
});
Scene scene = new Scene(ap);
scene.setFill(Color.rgb(252, 0, 4, 0.6));
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String args[]) {
launch();
}
}
你能解释或重现这种行为吗?谢谢!
答案 0 :(得分:0)
这不是一个错误 - 这是一个功能。一般规则是你不能点击你看不到的东西。如果这个决定留给程序员,我宁愿这样做。