是否可以在JavaFX中创建一个控制器数组?

时间:2017-01-25 19:58:10

标签: java user-interface javafx fxml

我有一个很好的搜索,要么我没有使用正确的术语,或者这个问题还没有出现。我已经用Java编写了几年的代码,而且我在过去的几周里刚刚开始使用Java FX。

上下文:

我试图创建一个有效的测验应用程序,但不是每个问题都有新的Pane / Tab,我想让它们并排出现。

我已经为单个问题创建了一个questionController,但我不确定创建许多可由fx:id< s唯一标识的questionController的最佳方法。

我希望我的GUI可扩展,以便用户可以选择每轮显示的问题数量。我似乎无法在不手动设置使用不同数量的questionControllers创建视图的情况下解决该怎么做。

我尝试的事情

  • 添加控制器gridPane,
  • 在FXML中导入控制器

但这不可缩放,因为我的按钮只是按钮0 - 按钮N

如果您需要更多信息,请告诉我们。

问题Controller.java

.menu ul {
    width: 97%;
}

QuestionController.fxml

public class QuestionController implements Initializable {

    @FXML
    private ComboBox<String> chordCombo;

    @FXML
    private Label questionField;

    @FXML
    private Button submitButton;

    @FXML
    private ToggleGroup answerGroup;

    @FXML
    private RadioButton toggle0, toggle1, toggle2, toggle3, toggle4;

    @Override
    public void initialize(URL fxmlFileLocation, ResourceBundle resources) {

        submitButton.setOnAction((event) -> {
            System.out.println("Submit Logic");
        });

        answerGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
            public void changed(ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle) {
                if (answerGroup.getSelectedToggle() != null) {
                    System.out.println(answerGroup.getSelectedToggle().toString());
                }
            }
        });

    }

1 个答案:

答案 0 :(得分:1)

我认为你正在寻找这样的东西:

public void onClick(View v) {
   //referenceOfActivity 
  // here is the context, don't know how to use it to get ActionBar title
  Toast.makeText(referenceOfActivity,"Already Liked",Toast.LENGTH_SHORT).show();
}

显然,如果TilePane pane = new TilePane(); // or whatever you are putting the questions in... int numQuestions = ... ; QuestionController[] controllers = new QuestionController[numQuestions]; for (int questionNumber = 0 ; questionNumber < numQuestions ; questionNumber++) { FXMLLoader loader = new FXMLLoader(getClass().getResource("path/to/QuestionController.fxml")); pane.getChildren().add(loader.load()); controllers[questionNumber] = loader.getController(); } (或其他)在另一个FXML文件中定义并注入到另一个控制器中,您可以根据需要在该控制器中将相同的代码放在事件处理程序或初始化方法中。