2015-04-05 49 views
0

我试图创建一个透明的锚定窗格,但您可以在同一时间拖动它。作为JavaFX场景填充特定透明度后无法捕获鼠标事件填充

我将舞台设置为透明,我给场景一个透明的填充,并且我在窗格上设置了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

尝试['setPickOnBounds(true)'](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#setPickOnBounds-boolean-)。如果它不是你正在寻找的,请提供[mcve](http://stackoverflow.com/help/mcve) – jewelsea 2015-04-05 07:53:52

+0

嗨,不,我认为这种方法不是现在的方法。我创建了mcve,以便您可以更好地看到问题。 – user3435407 2015-04-05 11:57:27

+0

你能重现吗?或者它是一个平台问题?如果帖子还不够好,让我知道 – user3435407 2015-04-06 12:56:54

回答

0

这不是一个错误 - 这是一个功能。一般的规则是你不能点击你看不到的东西。如果这个决定留给程序员,我更喜欢它。