我的控制器的视图中有一个带有客户名称的组合框,两者都是由FXMLLoader生成的。当我点击"创建新客户'按钮,调用newCustomerPane()
,打开第二个视图。该视图允许用户定义和添加新客户。用户完成后(点击"保存")addCustomer()
被调用,将新客户添加到数据库中。 addCusomter() then calls
更新`使用更新的客户列表填充第一个视图中的组合框。
问题是第一个视图根本不会更新。我已经尝试将第二个视图更新为测试,但似乎工作正常。我还测试了控制器是否成功将客户添加到数据库中,并且工作正常。我还确定控制器设法从数据库中检索新的更新。
以下是实例化控制器和视图的方法:
public class Run extends Application{
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader loader = new FXMLLoader();
Parent root = loader.load(getClass().getResource("ProjectBeheer.fxml"));
Scene scene = new Scene(root);
primaryStage.setScene(scene)
primaryStage.show();
ProjectBeheerController projectBeheerController=loader.getController();
}
}
这是我的控制器: 公共类ProjectBeheerController {
CustomerDAO customerDao = new CustomerDAO();
@FXML Button editBtn;
@FXML ComboBox<String> klantCB;
ObservableList<String> obList = FXCollections.observableArrayList("klant1","klant2");
@FXML Button newCustomer;
@FXML Button newProject;
@FXML Button newSprint;
@FXML Button newUserStory;
Stage customerStage = new Stage();
@FXML TextField custName;
@FXML TextArea custDescription;
@FXML Button custAddBtn;
@FXML Button custCancelBtn;
public ProjectBeheerController() {
klantCB = new ComboBox<String>();
}
@FXML
private void initialize() {
klantCB.setValue("klant");
update();
}
private void update(){
ArrayList<CustomerModel> customers = customerDao.getCustomerList();
ObservableSet<String> observableSet = FXCollections.observableSet();
for(CustomerModel customer: customers) {
observableSet.add(customer.getCustomer_name());
}
klantCB.setItems(FXCollections.observableArrayList(observableSet));
}
public void newCustomerPane(){
try {
Parent root = null;
root = FXMLLoader.load(getClass().getResource("ProjectBeheer_KlantEditor.fxml"));
Scene scene = new Scene(root);
customerStage.setScene(scene);
customerStage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
public void addCustomer(){
custName.setText(custName.getText()+" update!");
customerDao.addCustomer(custName.getText(),custDescription.getText());
this.update();
hideCustomerPane();
}
}
我在互联网上搜索了一个解决方案,但似乎没有人分享这个问题。我希望有人能帮助我。如果您想了解更多信息,请随时询问代码。