据我所知,当使用FXML描述Java FX场景时,controller类是手动编写的,然后可以从.FXML
文件引用它的成员变量和方法。当使用FXMLLoader
加载场景时,成员变量被设置为相应的场景元素,方法被自动连接到相应的事件。这可以工作,但是非常麻烦,因为需要在两个地方进行更改,并且任何错误只会在运行时出现。
我看到过其他GUI框架,这些框架允许您从场景描述生成控制器作为抽象类,需要实现该抽象类来访问场景元素和处理事件。我的意思的一个例子:
我将创建以下.fxml
文件(例如,使用JavaFX场景生成器):
<AnchorPane ... >
<children>
<Button fx:id="button" ... text="Button" onAction="#buttonPressed" />
</children>
</AnchorPane>
abstract class TestController {
protected final Parent root;
protected final Button button;
{
// Load test.fxml file
// Assign scene elements to root and button
// Attach event handler to the button that calls buttonClicked()
}
protected abstract void buttonClicked(ActionEvent event);
}
final class TestControllerImpl extends TestController {
TestControllerImpl(String buttonLabel) {
button.setText(buttonLabel);
}
@Override
protected void buttonClicked(ActionEvent event) {
button.setText("I've been clicked! What a great day!");
}
}
我从这种方法中看到以下好处:
initialize()
方法,因为构造函数将在场景被加载并将其元素分配给成员变量之后运行。现在SceneBuilder、NetBeans和Eclipse都支持这一点。注这在NetBeans和SceneBuilder中是开箱即用的,但是在Eclipse中首先需要e(fx)clipse插件。
SceneBuilder:在编辑器中打开一个FXML文件,进入菜单选择“查看”和“显示示例控制器骨架”。
Eclipse:打开fxml文件,以便在代码编辑窗格中显示内容(您应该看到fxml是Eclipse中带有语法高亮显示的明文xml,而不是在SceneBuilder中可视化呈现)。右键单击Eclipse中的代码并选择“code”,然后选择“Generate Controller”。
如何解释文件与其对应的控制器类之间的关系
我想做一些我认为应该很简单的事情。我有一个对象,用spring-boot、spring-data-rest和spring-hateoas设置。所有的基本工作都很好。我希望添加一个自定义控制器,该控制器返回的url的格式与GET to my
生成一个 Http Controller 必选参数: -name 生成的 Controller 类名 -namespace 生成的 Controller 所在命名空间 可选参数: -prefix 路由前缀,不传则为类名 -render 渲染方式,默认为json,可选:html/json/xml -rest 是否生成 RESTful 风格,默认 false -override 是否覆盖已存在的文件,
在应用程序中使用JavaFX,我有一个main.fxml文件,其中包含一些fxml子文件。 我想从子控制器访问Main.fxml的MainController类。 我试着用一个例子来解释得更好: MainFXML: 主控制器: ChildFXML:
问题内容: 我试图在JavaFX中获得TableView来动态显示内容。 当我运行程序时,出现此错误: 我的控制器名为“ UserInterfaceController.java”,它与FXML文件位于同一软件包下,我也已将该软件包导入了FXML中。为什么找不到控制器? FXML文件: 控制器: 主类: 问题答案: 使用FXML的全限定名来引用您的控制器: 后续问题的答案 对以下问题的回答解释了为