【问题标题】:JavaFX : fx:id proofingJavaFX : fx:id 校对
【发布时间】:2017-03-07 10:23:23
【问题描述】:

在控制器和 FXML 文件之间手动输入 fx:id 以及后期绑定是潜在的错误来源,会削弱代码的稳健性(我个人的看法)。 另一方面,它提供了灵活性。

有没有办法在运行时显示错误之前验证绑定和识别错误,或者这是“设计”的工作流程,您必须在编码时小心行事并小心?

编辑:
我正在使用带有 e(fx)clipse 和 Gluon Scene Builder 的 Eclipse

【问题讨论】:

  • 如果您在根元素上设置fx:controller 属性,某些IDE(例如IntelliJ)将使用它来交叉检查fx:id 值到@FXML 注释字段。跨度>
  • @sillyfly 这也适用于最新版本的 Eclipse。您也可以在控制器的 initialize 方法中使用 assert btnLogin != null : "fx:id=\"btnLogin\" was not injected: check your FXML file 'LoginView.fxml'.";
  • @sillyfly 我在 Eclipse 上尝试过,当我引用控制器中不存在于 FXML 中的控件时,我没有通过智能感知发出警告(引用该控制器)
  • 你会用什么样的逻辑来验证fxml???除了将值注入控制器之外,fx:id 还有其他用途,用户可能会不小心用@FXML 注释字段,尽管它是从控制器类本身写入的。两者都不会导致错误,但是它们的验证可能会失败......

标签: java javafx


【解决方案1】:

据我所知,没有像javac 这样会抱怨的真正“证据”。 JavaFx 对此过于动态。您可以做的最好的事情就是像这样将控制器添加到您的 FXML 文件中

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<ScrollPane xmlns="http://javafx.com/javafx/8" 
    xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.myapp.MyController">
    <content>
        ...
    </content>
</ScrollPane>

这将允许 EclipseIntelliJ (thx @silifly) 向您显示有关尚未绑定到控制器的元素的警告。但是这不会告诉FXMLLoader 执行的注入是否成功。然后,您可以在初始化阶段检查您的元素是否已正确注入。

import javafx.fxml.FXML;
import javafx.fxml.Initializable;

public class MyController implements Initializable {

    @FXML
    private Button btnLogin;

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        assert btnLogin != null : "fx:id=\"btnLogin\" was not injected: check your FXML file 'MyView.fxml'.";
    }
}

这是我知道并经常使用的两个工具来检查所有设置是否正确。

编辑:

我刚刚看到you don't need to implement the interface anymore你可以写

@FXML
public void initialize() {
    ...
}

【讨论】:

  • 请注意,不实现接口而仅使用名为initialize 的方法会引入编译器无法检查拼写错误的另一个地方......
  • 我正是这样做的,并且在 Eclipse 中没有任何警告。我在这里错过了什么吗?
  • 您不会在“问题”选项卡中看到任何错误,您需要打开 FXML 文件,然后它将标记所有未链接到控制器的警告元素
猜你喜欢
  • 1970-01-01
  • 2018-01-04
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 2018-09-29
  • 1970-01-01
  • 2016-10-11
相关资源
最近更新 更多