首页 > 解决方案 > 传递 ObservableList javaFX

问题描述

这是我的控制器类,该类包含从 ArrayList 中添加、编辑和删除任务的方法以及 ObservableList 的 getter。

    public class taskController {
       @FXML  private Button addButton;       
       @FXML  private DatePicker datePicker = new DatePicker();
       @FXML  private TextField descriptionTextField = new TextField();
              private List<task> taskList= new ArrayList<task>();

    public void initialize() {
         datePicker.setValue(LocalDate.now());

    public taskController() {
    }

    public void showAddTask() throws IOException {
        Stage stage = new Stage();
        AnchorPane taskLayout;
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(taskController.class.getResource("addTask.fxml"));
        taskLayout = loader.load();
        Scene scene = new Scene(taskLayout);
        stage.setScene(scene);
        stage.show();

    }

   @FXML private void addTask() throws IOException, InterruptedException {
    this.taskList.add(new task(descriptionTextField.getText(),datePicker.getValue().getYear(),datePicker.getValue().getMonthValue(),datePicker.getValue().getDayOfMonth()));
    }

public ObservableList<task> getTaskListView() {
    return FXCollections.observableArrayList(this.taskList);
}

当我从 Main 类中获取 ObservableList 时,我得到了这个错误。

`Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at view.taskController.getTaskListView(taskController.java:93)
at Main.showTask(Main.java:49)
at Main.updateButton(Main.java:61)`

这是我的主要课程:

    public class Main extends Application {
          private taskController taskController = new taskController();       
          private feedController feedController = new feedController();
          private Stage primaryStage;
    @FXML private StackPane taskStackPane = new StackPane();
    @FXML private StackPane newsStackPane = new StackPane();
    @FXML private ListView<task> taskListView;
    @FXML private ListView<Calls> callList;

    public void initialize() {
        this.primaryStage = new Stage();
        showNews();
    }

    public void start(Stage primaryStage) throws IOException {
        VBox mainLayout;
        this.primaryStage = primaryStage;
        this.primaryStage.setTitle("App POO");
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(Main.class.getResource("assistant.fxml"));
        mainLayout = loader.load();
        Scene scene = new Scene(mainLayout);
        primaryStage.setScene(scene);
        primaryStage.show();    
    }

          private void showNews() {
              newsStackPane.getChildren().add(feedController.generateObservableNews());         
          }
     private void showTask() {
         taskListView = new ListView<>();
         taskListView.setItems(this.taskController.getTaskListView());   
         taskStackPane.getChildren().add(taskListView);

     }

     public void newTaskButton() throws IOException {
            this.taskController.showAddTask();

        }

我不明白问题出在哪里,对象被很好地实例化(这样想),但是 taskList 正在丢失。

标签: javafxjavafx-8

解决方案


推荐阅读