如何在JavaFX中打开新窗口时运行默认代码(初始化)

时间:2016-04-22 19:28:28

标签: javafx fxml

我想从JavaFX中的主控制器打开NewWindow时运行一些代码。

这是我的主控制器:

public class FXMLDocumentController implements Initializable {
//consider all variables and or elements initialized
final Stage newWindow = new Stage();

@FXML
private void searchButtonAction(ActionEvent event)  {
    //Clicking on Search button triggers this event handler and Search Window will open with all the results
    newWindow.show();
}

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

    try {
        newWindow.initModality(Modality.APPLICATION_MODAL);
        //Loader to load the Search Window
        FXMLLoader loader = new FXMLLoader(
                getClass().getResource("SearchWindow.fxml")
        );
        Scene scene = new Scene(loader.load());
        newWindow.setScene(scene);
        SearchWindowController controller = loader.<SearchWindowController>getController();
        controller.mainWindow = this;

    } catch (Exception e) {
        System.err.println(e.getMessage());
    }`
}`}`

这是我的新窗口控制器:

public class SearchWindowController implements Initializable {

@FXML
void searchButtonAction() {
    //Code i want to run when this window opens
    } catch (Exception e) {
        System.err.print(e);
    }
}

/**
 * Initializes the controller class.
 *
 * @param url
 * @param rb
 */
@Override
public void initialize(URL url, ResourceBundle rb) {
    //empty 
    //call searchButtonAction() when this window opens ??? 
}

所以基本上新窗口打开但我想运行一些加载后的代码。我已经经历了一些地方,并注意到我可以制作一个应该在新窗口启动时运行的启动方法。但我无法让它在我的代码中运行。另外我看到的另一种方法是放置一个事件处理程序。

我的问题再次出现,如果我要实现上述方法,我应该把那些方法/事件处理程序放在哪里。我想在窗口加载时默认调用我的searchButtonAction()。一种不同的方法也会有所帮助。一些例子将不胜感激。

编辑:我希望输出显示在newWindow上,它基本上是从主窗口中获取的一些文本,并在新窗口中显示。 (目前我正在解决的问题是在新窗口中创建一个新按钮,然后在按钮上放置一个onClickAction事件来运行searchButtonAction())。我希望searchButtonAction()按默认运行。如何初始化它,以便在打开新窗口时调用searchButtonAction()。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我遇到了这个问题。我在fxml文件中指定了错误的控制器。当我为fxml文件指定了正确的控制器时,它起作用了。