尝试从JavaFX中的另一个类访问observableArrayList时出错

我希望访问和更新作为另一个类的一部分的observableArrayList的数据。该程序可以正常运行,直到我单击按钮尝试更新另一个类的observableArrayList变量为止。

这是我的 DataBank.java 文件,用于存储基本字典应用程序的“术语”和“定义”的属性:

package termbankapp.data;

import javafx.beans.property.SimpleStringProperty;

public class DataBank {
    private  SimpleStringProperty term;
    private  SimpleStringProperty definition;


public DataBank(String termVal,String defVal) {
    this.term = new SimpleStringProperty(termVal);
    this.definition = new SimpleStringProperty(defVal);
}

public String getTerm() {
    return term.get();
}

public void setTerm(String termVal) {
    term.set(termVal);
}

public String getDefinition() {
    return definition.get();
}

public void setDefinition(String defVal) {
    definition.set(defVal);
}
}

我的 PrimaryController.java 文件,该文件创建并存储一个observableArrayList对象,该对象将用作更新tableView的参考:

package termbankapp.view;

import java.io.IOException;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.actionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import termbankapp.data.DataBank;

public class PrimaryController {

    @FXML
    private TableView<DataBank> tableView;
    @FXML
    private TableColumn<DataBank,String> termColumn;
    @FXML
    private TableColumn<DataBank,String> defColumn;

    @FXML
    private Button addTermButton;
    @FXML
    private Button editTermButton;
    @FXML
    private Button deleteTermButton;

    private ObservableList<DataBank> data = FXCollections.observableArrayList();

    //Default Constructor
    public PrimaryController() {

    }

    /*
     * Initializes the controller class
     */

    @FXML
    public void initialize() {
        termColumn.setCellValueFactory(new PropertyValueFactory<DataBank,String>("term"));
        defColumn.setCellValueFactory(new PropertyValueFactory<DataBank,String>("definition"));

        tableView.setItems(data);
    }

    @FXML
    public void addnewTerm(actionEvent event) {

        //Event handling function for adding a new term
        try {
        FXMLLoader fxmlLoader = new FXMLLoader(PrimaryController.class.
                getResource("/termbankapp/newterm/NewTermWindow.fxml"));
        Parent root1 = (Parent) fxmlLoader.load();
        Stage stage = new Stage();
        stage.setScene(new Scene(root1));
        stage.setResizable(false);
        stage.show();

        } catch(IOException e1) {
            e1.printStackTrace();
        }
    }

    @FXML
    public void editTerm(actionEvent e) {
        //Event handling function for editing a term
    }

    @FXML
    public void deleteTerm(actionEvent e) {
        //Event handling function for deleting a term
    }

    /*
     * This method will return an ObservableList of DataBank objects
     * 
     */

    public ObservableList<DataBank> getData() {
        return data;
    }
}

现在这是我的 NewTermController.java 文件,它负责上述错误。我尝试使用对PrimaryController类的对象引用来访问observableArrayList,但出现NullPointerException错误。

package termbankapp.newterm;

import javafx.event.actionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import termbankapp.data.DataBank;
import termbankapp.view.PrimaryController;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;

public class NewTermController {

    @FXML
    private TextField termField;
    @FXML
    private TextArea defArea;

    @FXML
    private Button addTermButton;

    private PrimaryController pController;

    @FXML
    public void submitNewTerm(actionEvent e) {
        if(termField.getText().isEmpty() || defArea.getText().isEmpty()) {
            Alert alert = new Alert(AlertType.WARNING);
            alert.setTitle("Warning");
            alert.setHeaderText("No input detected");
            alert.setContentText("Please enter values for both fields");

            alert.showAndWait();
        }

        else {
            if(!pController.getData().contains(termField.getText())) {
                pController.getData().add(new DataBank("Term 1","Def 1"));
            }
            else {
                Alert alert = new Alert(AlertType.WARNING);
                alert.setTitle("Warning");
                alert.setHeaderText("Term already exists in table");
                alert.setContentText("Please input a different value for the term");

                alert.showAndWait();
            }
        }
    }

}

我想知道1)如何解决此问题以获得所需的结果,以及2)了解如何在类之间引用对象,因为这将使我对Java语言有更强的掌握力。谢谢!

iCMS 回答:尝试从JavaFX中的另一个类访问observableArrayList时出错

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2225133.html

大家都在问