我开始探索JavaFX FXML应用程序技术。
@Override
public void start(Stage stage) throws Exception {
STAGE = stage;
LOGIN = new Scene(FXMLLoader.load(getClass().getResource("Login.fxml")));
REGISTER = new Scene(FXMLLoader.load(getClass().getResource("Register.fxml")));
STAGE.setScene(LOGIN);
STAGE.setTitle("FXApplication");
STAGE.show();
}
public static Stage getStage() {
return STAGE;
}
并且两者具有相同的onclick
eventhandleButtonAction(ActionEvent event)
。TextFields是用于登录/注册用户名的字段。
@FXML private Button buttonLoginRegister;
@FXML private Button buttonRegisterBack;
@FXML private TextField fieldLoginUsername;
@FXML private TextField fieldRegisterUsername;
@FXML
private void handleButtonAction(ActionEvent event) throws IOException {
Stage stage = Main.getStage();
if (event.getSource() == buttonLoginRegister) {
stage.setScene(Main.REGISTER);
stage.show();
// Setting the text, the working way
TextField node = (TextField) stage.getScene().lookup("#fieldRegisterUsername");
node.setText(fieldLoginUsername.getText());
// Setting the text, the erroneous way
// fieldRegisterUsername.setText(fieldLoginUsername.getText());
} else {
stage.setScene(Main.LOGIN);
stage.show();
}
}
我的目标是将login
TextField中的值复制到Register
场景中的值。使用上面的代码可以很好地工作。然而,首先,我尝试用以下方法访问另一个场景中的元素:
fieldRegisterUsername.setText(fieldLoginUsername.getText());
而且是错误的。确切地说,FieldRegisterUserName
是null
。
为什么有些元素是用lookup(String id)
方法找到的,而不是用@fxml
注释找到的?
正如我在评论中提到的,在不同的视图之间共享一个控制器很少是一个好主意,我强烈建议您为每个视图创建一个单独的控制器。
至于问题本身--控制器类有两个实例,每次调用fxmlloader.load
时一个实例。假设一个视图具有FieldLoginUsername
TextField,而另一个视图具有FieldRegisterUsername
.
如果满足If
语句的条件,则意味着活动场景是登录场景,因此处理它的控制器是具有FieldLoginUsername
的控制器,因此FieldRegisterUsername
的控制器,因此FieldRegisterUsername
自然为空。
但是在if
子句的第一行,您将活动场景更改为Register场景,因此在调用scene#lookup
时,您引用的场景的控制器是Register控制器,也就是具有FieldRegisterUserName
的场景。
如果在更改活动场景之前调用scene#lookup
,您会发现它也返回null。
如果必须将同一个类用于controller,则可能需要确保只有该类的一个实例。这就需要使用FXMLLoader#SetController
。
问题内容: 最初一切正常,我有一个类似的组件。这个 在其他档案中 到这里为止一切正常,但是当我在 它不起作用。我已经从react-redux导入了connect 问题答案: 接受为第四参数。在此选项参数中,您可以将flag设置为true。之后,您可以使用like 来访问ref的函数
问题内容: 这是一个测试类: 这是我的输出: 我缺少通过反射使注释可见的什么? 我是否仅需要检查它们的存在就需要注释处理器? 问题答案: 为了在运行时访问注释,它需要具有运行时的保留策略。 否则,注释将被丢弃,并且JVM无法识别它们。 有关更多信息,请参见此处。
问题内容: 是否可以通过注释处理器访问带有注释的元素? 是否可以通过注释处理器访问带注释的类型边界? 高度赞赏我错过的相关文档的链接。 内容: 注释: 一个示例类: 处理器: 在classpath 上使用编译以上内容将显示消息,但永远不会调用该方法。当方法参数中存在注释时,使用注释向处理器添加另一个注释可以正常工作。如果方法参数带有注释,则过程将再次忽略该元素。 问题答案: 该注释是有点棘手,因为
我有一个带有Web触发器endpoint的Azure函数设置,我想将其用作React应用程序的后端。没有身份验证设置,它工作正常。当我使用AD设置应用服务身份验证时,当我直接通过浏览器访问时(身份验证后),它工作正常,但当我尝试从提供承载令牌的JS访问时,我得到了401。 客户端应用程序正在Azure上运行,并已注册为Azure AD应用程序。我能够成功地验证、查询AD和使用MS Graph AP
问题内容: 通常,在面向对象的范例中,静态方法只能访问静态变量和静态方法。如果是这样,那么就会出现一个明显的问题,即Java中的main()方法如何才能访问非静态成员(变量或方法),即使它特别是公共静态void … !!! 问题答案: main方法也无权访问非静态成员。
要 动态获取一个对象方法的信息,首先需要通过下列方法之一创建一个 类型的对象或者数组。 getMethods() getMethods(String name,Class<?> …parameterTypes) getDeclaredMethods() getDeclaredMethods(String name,Class<?>...parameterTypes) 如果是访问指定的构造方法,需要