使用Scene Builder在JavaFX中的Button数组

时间:2016-11-17 17:03:47

标签: java javafx javafx-8 scenebuilder

假设我在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?

1 个答案:

答案 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;
 } 

}