我正在构建一个简单的登录注册表单,我正在尝试使用文本流来切换主要阶段的场景,但由于某种原因,我尝试使用的事件处理程序都没有按预期工作
这是我迄今为止尝试过的
TextFlow flow = new TextFlow(new Hyperlink("Dont have an account?"));
flow.setOnMouseClicked(actionEvent -> primaryStage.setScene(scene2));
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 Hyperlink
,TextFlow
那么您可能应该Hyperlink
直接使用 the 。
1. 这是由javafx.scene.control.SkinBase
班级完成的。见其#consumeMouseEvents(boolean)
方法。