如何为JavaFX自定义控件添加Scene Builder的On Action选项?
解决Scene Builder 2.0中自定义SliderSwitch控件不显示On Action选项的问题
严格遵循JavaFX属性规范并添加FXML注解
Scene Builder识别控件的可绑定事件,完全依赖符合标准的属性定义和注解。你需要确保onAction属性的实现满足以下要求:- 定义
ObjectProperty<EventHandler<ActionEvent>>类型的属性,命名为onActionProperty - 配套实现
setOnAction和getOnAction方法 - 给
setOnAction方法添加@FXML注解——这是Scene Builder识别该事件选项的关键
示例代码:
import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.scene.control.Control; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; public class SliderSwitch extends Control { private final ObjectProperty<EventHandler<ActionEvent>> onAction = new SimpleObjectProperty<>(); @FXML public void setOnAction(EventHandler<ActionEvent> handler) { onAction.set(handler); } public EventHandler<ActionEvent> getOnAction() { return onAction.get(); } public ObjectProperty<EventHandler<ActionEvent>> onActionProperty() { return onAction; } // 控件触发动作时调用此方法,分发事件 private void fireAction() { ActionEvent event = new ActionEvent(this, null); EventHandler<ActionEvent> handler = onAction.get(); if (handler != null) { handler.handle(event); } } }- 定义
重新导入控件并刷新Scene Builder
完成代码修改和编译后,需要:- 在Scene Builder的库面板中移除旧的SliderSwitch控件
- 通过
Library->Import JAR/FXML File重新导入编译后的控件类文件 - 将新导入的控件拖拽到场景,再查看Code标签下的On Action选项
检查版本兼容性
Scene Builder 2.0对JavaFX 8的支持最稳定,如果你的控件基于更高版本JavaFX开发,可能出现识别异常,建议统一使用JavaFX 8环境。
内容的提问来源于stack exchange,提问作者StealthRT
相关产品推荐
相关产品推荐

