如何使用 TextFlow 控件处理事件?

How do I handle events with a TextFlow control?

我正在构建一个简单的登录注册表单,我正在尝试使用文本流来切换初级阶段的场景,但出于某种原因,none 我尝试过的事件处理程序使用正常

这是我目前尝试过的方法

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

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

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

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吗?如果您所做的只是将 Hyperlink 放在 TextFlow 中,那么您可能应该直接使用 Hyperlink


1.这是由 javafx.scene.control.SkinBase class 完成的。请参阅其 #consumeMouseEvents(boolean) 方法。