JavaFX observableArrayList 总是被覆盖

标签 java arraylist javafx

我是 Java 新手,遇到了一些问题。

有两个类,我尝试从 PopupCarEntryController 类写入 ChoiceCarController 类中的 ArrayList 。使用 addCarToList 方法。

但是每次我启动这个方法时,ArrayList 都是空的或者被覆盖。

选择汽车 Controller :

import Car;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.Separator;

public class FXMLChoiceCarController implements Initializable {

    private FahrtenbuchFX application;

    public FXMLChoiceCarController() {
        this.carChoiceBox = new ChoiceBox(carChoiceBoxData);
    }

    @FXML
    private void handleSelectButtonAction(ActionEvent event) {
        if (!carChoiceBox.getSelectionModel().isEmpty()) {
            application.FahrtenbuchView();
        } else {

        }
    }

    @FXML
    private void handleAddButtonAction(ActionEvent event) {
        application.showPopup();
    }

    @FXML
    private void handleExitButtonAction(ActionEvent event) {
        System.exit(0);
    }


    public ObservableList<Car> carChoiceBoxData = FXCollections.observableArrayList();

    @FXML
    private ChoiceBox carChoiceBox;

    @FXML
    private void handleCarChoiceBoxAction(ActionEvent event) {

    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        carChoiceBox.getSelectionModel().selectFirst();
        carChoiceBox.setItems(carChoiceBoxData);
//        this.carChoiceBoxData.add(new Car("asdf", "asdf"));
        System.out.println(getCarList());
    }

    public void addCarToList(Car car) {
        System.out.println(getCarList());
        carChoiceBoxData.add(car);
        System.out.println(getCarList());
    }

    public String getCarList() {
        return carChoiceBoxData.toString();
    }

    public void setApp(FahrtenbuchFX application) {
        this.application = application;
    }

}

和 PopupCarEntryController

import Car;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.Separator;
import javafx.scene.control.TextField;


public class FXMLPopupCarEntryController implements Initializable {

    private FahrtenbuchFX application;

    @FXML
    private Label labelErrorMessage;

    @FXML
    private TextField textFieldProducer;

    @FXML
    private TextField textFieldModel;

    @FXML
    private TextField textFieldEngine;

    @FXML
    private TextField textFieldFuel;

    @FXML
    private TextField textFieldFlag;

    @FXML
    private void handleSaveButtonAction(ActionEvent event) {
        FXMLChoiceCarController carController = new FXMLChoiceCarController();
        carController.addCarToList(new Car(textFieldProducer.getText(), textFieldModel.getText()));

    }

    @FXML
    private void handleCloseButtonAction(ActionEvent event) {
        application.hidePopup();
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        //TODO
    }

    public void setApp(FahrtenbuchFX application) {
        this.application = application;
    }
}

我不明白的是,当我在 void initialize 方法中初始化 List 并在 addCarToList 方法中执行 out.println 时,结果是不同的。就像变量指向不同的 ArrayList 时一样。

最佳答案

那是因为每次你实例化 Controller 类时都是这样的:

FXMLChoiceCarController carController = new FXMLChoiceCarController();

所以你每次都会创建列表,例如:

public ObservableList<Car> carChoiceBoxData = FXCollections.observableArrayList();

如果您想重用该列表,请将列表设为静态,例如:

public static ObservableList<Car> carChoiceBoxData = FXCollections.observableArrayList();

因此,您的列表只有一个实例。

关于JavaFX observableArrayList 总是被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27701531/

相关文章:

java - 链接方法调用还是引入中间变量更好?

java - 未指定哪个列表实现

java - 使用 ArrayLists 优化 for 循环

java - 如何在 Java 迭代中分割字符串

java - 如何使用 imgscalr 将文本添加到图像

java - 如何在我的网站中添加/嵌入 Java 应用程序?

java - Throwable 参数 'ex' 到 'System.out.println()' 调用

canvas - Java Fx setOnMouseDragged 变慢

Java:为什么我正在运行的外部程序在 Java 中调用时会卡住?

java - ID 数组列表的用户定义索引