假设我在FXML中有两个按钮:
<Button fx:id="button1" onAction="#onClick1" prefHeight="134.0" prefWidth="134.0"></Button>
<Button fx:id="button2" onAction="#onClick2" prefHeight="134.0" prefWidth="134.0"></Button>
我希望将它作为控制器类中的按钮数组。我该怎么办呢?我试过了:
public Button button1, button2;
public Button[] arrayButtons = {button1, button2}
并尝试制作方法:
public class controller {
public Button button1, button2;
public Button[] arrayButtons;
public void initializeButtonArray() {
arrayButtons = new Button[2];
arrayButtons[1] = button1;
arrayButtons[2] = button2;
}
}
这些都不起作用,因为当我尝试对数组做某事时(即。arrayButton [1] .setText(&#34; Test&#34;)),它给了我一个运行时异常:
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
如何进行并拥有一个Button数组,其中的元素来自fx:id?
答案 0 :(得分:1)
你在这里:
1)使用@FXML注释导致对象是私有的。如果你将它们公开,则不需要使用@FXML
2)一旦FXMLLoader加载了控制器,就会调用initialize
方法。在此之前,您确定已经初始化了与fxml场景图链接的每个对象。
代码(显然这是一种方式,您可以通过其他各种方式实现):
public class controller {
@FXML
private Button button1;
@FXML
private Button button2;
public Button[] arrayButtons;
@FXML
public void initialize(){
initializeButtonArray();
}
public void initializeButtonArray() {
arrayButtons = new Button[2];
arrayButtons[1] = button1;
arrayButtons[2] = button2;
}
}