【问题标题】:Array of Button in JavaFX using Scene Builder使用 Scene Builder 的 JavaFX 中的按钮数组
【发布时间】:2016-11-17 17:03:46
【问题描述】:

假设我在 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("Test")):

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

我怎样才能拥有一个 Button 数组,其中元素来自 fx:id?

【问题讨论】:

  • 只需将initializeButtonArray 重命名为initialize(或从initialize() 调用initializeButtonArray() 方法)。
  • 非常感谢!

标签: java javafx javafx-8 scenebuilder


【解决方案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;
 } 

}

【讨论】:

    猜你喜欢
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    相关资源
    最近更新 更多