【问题标题】:Problem with click through transparent Stage on macOS在 macOS 上点击透明舞台的问题
【发布时间】:2019-06-05 14:32:10
【问题描述】:

信息: 在 macOS Mojave 上运行的 Java 8x64

问题: 无法点击 javafx 舞台上的透明背景。

代码:

VBox root = new VBox();
AnchorPane background = new AnchorPane();
background.setPrefSize(400, 400);
background.setMinSize(400, 400);
background.setMaxSize(400, 400);
background.setClip(new 
javafx.scene.shape.Rectangle(400,400));
root.getChildren().add(background);

Scene scene = new Scene(root);
Stage stage = new Stage();
scene.setFill(javafx.scene.paint.Color.TRANSPARENT);
stage.setScene(scene);
stage.setAlwaysOnTop(true); //remove on java7
stage.initStyle(StageStyle.TRANSPARENT);
stage.show();

这只是一个测试代码给你看,你将无法点击这个不可见的视图。在 Windows 上使用 java 7x86 中的相同代码将可以工作(您将能够点击)。

【问题讨论】:

  • 您能否再解释一下您的意图,并请发帖MCVE,以便您获得更多帮助。你只是想显示一个对话框吗?您可以使用JOptionPane。请以更全面的方式提供您尝试做的更新请同时提供有关root变量的更新
  • 如果你不知道请看这个。如果您不知道,请不要降低投票。 bugs.openjdk.java.net/browse/JDK-8088104
  • 我没有否决这个问题,但没有更多信息,很难正确回答您的问题,只是想让您知道这就是我发表评论以帮助您的原因。
  • 我正在尝试在 Windows 上做一些非常简单的事情,但在 macOS 上似乎有一个错误。透明度的工作方式不同。我发现了很多关于这个的未回答的问题。我只想在我的屏幕上显示一个按钮,当我将鼠标悬停在它上面时,会出现一个视图。我通常用 setVisible(false) AnchorPane 做一个透明背景。即使没有可见性,我仍然可以点击它。 Windows 上的相同代码不会这样做。
  • 两件事。 (1) 一个适当的minimal reproducible example,人们可以复制粘贴并按原样运行 将改善您的问题。 (2) 你确定macOS支持你想要的功能吗?

标签: java macos user-interface javafx java-8


【解决方案1】:

如果您使用 javafx,则可能值得使用传统阶段而不是 jfxpane。您可以使用以下方法创建透明舞台:

Stage s = new Stage(StageStyle.TRANSPARENT);

【讨论】:

  • 是的,如果我创建一个透明的舞台并添加一个空的方形场景,我根本看不到它,但我仍然可以点击它。在 Windows 上,同样的东西是不可点击的。我的屏幕上有一个扬声器按钮,当鼠标悬停在它上面时,它上面会出现一个视图。当我的视图被隐藏时,我仍然可以单击它。我不想要那个。很难解释,但这似乎只在 mac 上。
  • 似乎操作系统注册了该阶段。我认为这是因为您设置了填充(即使是透明的),所以它会记录周边之间的空间,而不是在未填充时仅记录周边线。您可以通过使周界线变粗来测试这一点,看看单击它们的行为是否相同。 ... 对,那么当您不希望它可点击时,为什么不将弹出窗口(将鼠标悬停在声音图标上时显示的内容)移动到屏幕外位置 (1981:1081)?跨度>
  • 更改 setFill(null) 的代码,它会做同样的事情。我尝试在节点上设置布局X 或 Y,但它似乎没有移动。
【解决方案2】:

编辑:您描述的问题显然是低级错误。我认为 SO 上的任何人都没有解决方法。

也许您正在寻找的是mouseTransparentProperty 将其设置为 true 将导致节点不接收任何鼠标事件。 无论您的组件是否可见,它都有效。

【讨论】:

  • 好吧,如果这是一个错误,这就是我想知道的。任何解决方法也值得赞赏。 setMouseTransparent 不工作,仍然阻塞操作系统。
  • 在意识到 setMouseTransparent 没有必要之后,我进行了编辑。如果不修改底层代码,我认为没有任何解决方法。
猜你喜欢
  • 1970-01-01
  • 2012-04-10
  • 2017-12-17
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 2012-12-03
相关资源
最近更新 更多