在弹出窗口中重新定义节点属性

时间:2016-12-28 23:02:09

标签: java javafx popup

我有一个带有弹出窗口的javafx应用程序,其中包含一些复选框。我想将所选值从true设置为false,但我找不到从控制器内部执行此操作的方法。

重定义值适用于INITIALIZE类内部的主窗口,包括复选框和按钮,但重新定义的值对弹出窗口中的节点没有影响。

解决方案可能很简单,但我还有很多时间难以理解。

有什么想法吗?

@FXML
private CheckBox googleHider;
@FXML
public Button googleButton; 
@FXML
private CheckBox popupCheckbox;


@FXML
public void openDialog(ActionEvent event) throws IOException{

    Stage stage; 
    Parent root;

    if(event.getSource()==dialog){

        //following line should set the value for the checkbox, but popup refuses to open

        popupCheckbox.setSelected(false);

        stage = new Stage();
        root = FXMLLoader.load(getClass().getResource("PopupFXML.fxml"));
        stage.setScene(new Scene(root));
        stage.setTitle("Dialog Window");
        stage.initModality(Modality.APPLICATION_MODAL);
        stage.initOwner(dialog.getScene().getWindow());
        stage.showAndWait();     

        }

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

    // works fine, button is in the main window
    googleButton.setText("hello");

    // works fine, checkbox is in the main window
    checkbox.setSelected(false);

    //doesn't work, checkbox is in the popup window
    popupCheckbox.setSelected(false);


    } catch (Exception e) {
}

1 个答案:

答案 0 :(得分:0)

根据评论中发布的建议,我决定基于第二个fxml文档和第二个控制器创建一个弹出窗口(在NetBeans中,新建 - >清空FXML ... - >使用Java控制器 - >创建新...)。

这是为了更好地控制节点和布局,包括从属性文件中获取的设置。

最初的问题是弄清楚如何在主控制器中构建舞台并将其连接到弹出控制器。

链接Passing Parameters JavaFX FXML提供了一些真正有用的见解和技巧。

最终代码看起来像这样(我希望它可以帮助某人):

// Anchor Pane from the popup
@FXML
AnchorPane anchorPanePopup;

@FXML
private void eButtonAction(ActionEvent event) throws IOException {     
    Stage newStage = new Stage();
    AnchorPane anchorPanePopup = (AnchorPane) FXMLLoader.load(getClass().getResource("Popup_FXML.fxml"));
    Scene scene = new Scene(anchorPanePopup);
    newStage.setScene(scene);
    newStage.initModality(Modality.APPLICATION_MODAL);
    newStage.setTitle("Dialog Window");
    newStage.showAndWait();        
}