我希望访问和更新作为另一个类的一部分的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语言有更强的掌握力。谢谢!