我想使用Javafx 8创建一个自定义按钮,我可以使用注释进行初始化。 但是在按钮初始化时,只出现了FXML注释。 如何使用注释创建自定义按钮?
注释:
@Retention( RetentionPolicy.RUNTIME )
@Target(ElementType.FIELD)
public @interface Anno {
String someAction();
String someValue();
}
类构造函数:
public CustomButton() {
super();
if (this.getClass().isAnnotationPresent(Anno.class)) {
Anno anno = this.getClass().getAnnotation(Anno.class);
setAction(anno.someAction());
setValue(anno.someValue());
}
initialize();
}
调用自定义按钮:
@FXML
@Anno(someAction = "someAction", someValue = "Hello")
private CustomButton button;
有办法吗?
答案 0 :(得分:0)
我认为以你想要的方式不可能。 CustomButton的构造函数正在查找CustomButton类的注释,而不是它所分配的字段,这意味着它永远不会找到正确的注释。据我所知,没有简单的方法可以从构造函数调用中获取控制器实例和字段引用来解决此问题。
所以也许您应该尝试关注this tutorial,以便能够在.fxml文件中设置这些字段。
答案 1 :(得分:0)
您无需创建自己的注释。使用反射将是无用和复杂的。
要直接回答问题,注释是在字段级别而不是在类型级别上,这就是您没有获得“Anno”注释实例的原因。
无论如何,重要的是你必须在FXML文件或控制器中初始化按钮的值。
您可能希望看到Oracle的教程: https://blogs.oracle.com/jmxetc/entry/connecting_scenebuilder_edited_fxml_to
所以在FXML中:
<Button fx:id="myButton" text="a text" onAction="#myAction"/>
或控制器中的等效物
只需在FXML中声明按钮
<Button fx:id="myButton" />
然后绑定控制器中的动作
public class MyController
@FXML Button myButton;
@FXML
public void initialize(){
myButton.setText("a text")
myButton.setOnAction(this::myAction);
}
编辑:您的问题是关于“自定义”组件,如果您遇到困难,请注意您可以添加javaFX属性,使用e(fx)clipse插件生成getter / setter,或者等效,然后可以访问这些访问者在FXML /控制器中都是一样的。如果您想了解更多相关细节,请与我们联系。