1

我正在构建一个简单的登录注册表单,我正在尝试使用文本流来切换主要阶段的场景,但由于某种原因,我尝试使用的事件处理程序都没有按预期工作

这是我迄今为止尝试过的

 TextFlow flow = new TextFlow(new Hyperlink("Dont have an account?"));
 flow.setOnMouseClicked(actionEvent -> primaryStage.setScene(scene2));
  
4

1 回答 1

2

JavaFX 中的大多数控件默认使用鼠标事件1。这意味着当您单击Hyperlink事件时,事件在它可以冒泡到 之前被消耗TextFlow,因此您的事件处理程序永远不会被调用。

您可能应该设置无论如何的onAction属性Hyperlink,因为这不仅在语义上更正确,而且除了鼠标输入之外还允许对键盘输入做出反应。例如:

Hyperlink link = new Hyperlink("Don't have an account?");
link.setOnAction(e -> primaryStage.setScene(scene2));

TextFlow flow = new TextFlow(link);
// do something with 'flow'...

顺便说一句:你需要在这里使用TextFlow吗?如果您所做的只是在其中放置 a HyperlinkTextFlow那么您可能应该Hyperlink直接使用 the 。


1. 这是由javafx.scene.control.SkinBase班级完成的。见其#consumeMouseEvents(boolean)方法。

于 2021-08-07T07:51:08.033 回答