fxml视图不会更新:如何在第二个视图处理呼叫后让我的控制器更新我的第一个视图?

时间:2017-10-24 16:20:55

标签: java javafx fxml

我的控制器的视图中有一个带有客户名称的组合框,两者都是由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();
}
}

我在互联网上搜索了一个解决方案,但似乎没有人分享这个问题。我希望有人能帮助我。如果您想了解更多信息,请随时询问代码。

0 个答案:

没有答案