如何从另一个类处理ActionEvent

时间:2016-04-25 12:55:39

标签: java javafx actionevent

我现在正在使用JavaFX并在Schoolproject上工作。

关于我的程序,我有一个登录屏幕,如果我按登录,我来到大型机。大型机的内容区域为空,因为当我使用菜单栏中的按钮时,我会加载构建大型机的AnchorPane的内容。

当我按下登录按钮时,我想在其中放置主机和主窗格。但我不知道如何将窗格从另一个类加载到大型机中。

这是我的代码:

加载大型机的代码:

In [19]: np.einsum('i,j->ij',[1,2,3],[1])
Out[19]: 
array([[1],
       [2],
       [3]])

In [30]: %%timeit x=np.arange(1000)
    ...: y=x[:,None]
1000000 loops, best of 3: 439 ns per loop

In [31]: %%timeit x=np.arange(1000)
    ...: np.einsum('i,j->ij',x,[1])
100000 loops, best of 3: 15.3 µs per loop

将主窗格放入大型机的代码:

@FXML
protected void login(ActionEvent event) throws IOException, URISyntaxException {
    Stage stage;
    Parent root = null;
    stage = (Stage) btnLogin.getScene().getWindow();
    try{
        root = FXMLLoader.load(getClass().getResource("view/mainframe.fxml"));
        } catch (IOException e){
            e.printStackTrace();
        }
    Scene scene = new Scene(root, 1280, 900);
    stage.setScene(scene);
    stage.show();       

}

这两种方法属于不同的类别。

如果您需要更多信息,请告诉我们:)

谢谢你,问候,蒂莫

1 个答案:

答案 0 :(得分:0)

只需调用mHome()方法即可。请注意,由于您从不使用ActionEvent,因此您可以从方法签名中省略它(FXMLLoader仍然可以将其映射为事件处理程序)。所以把它改成

@FXML
protected void mHome() throws IOException, URISyntaxException {

    try {                    
        URL url = getClass().getResource("view/home.fxml");
        FXMLLoader fxmlLoader = new FXMLLoader();
        fxmlLoader.setLocation(url);
        fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
        AnchorPane page = (AnchorPane) fxmlLoader.load(url.openStream()); 

        aContent.getChildren().clear();
        aContent.getChildren().add(page);
    } 
    catch (IOException e) {
        e.printStackTrace();
    }

}

如果总是想要在首次显示主窗格时显示“主窗格”,只需将mHome的号召添加到initialize()方法中控制器类:

public void initialize() {
    // existing code...

    mHome();
}

或者,如果您只想在登录窗格中加载“主窗格”时显示“主窗格”,请在登录处理程序中添加对mHome的调用:

@FXML
protected void login(ActionEvent event) throws IOException, URISyntaxException {
    Stage stage;
    Parent root = null;
    stage = (Stage) btnLogin.getScene().getWindow();
    try{
        FXMLLoader loader = new FXMLLoader(getClass().getResource("view/mainframe.fxml"));
        root = loader.load();
        MainController controller = loader.getController();
        controller.mHome();
    } catch (Exception e){
        e.printStackTrace();
    }
    Scene scene = new Scene(root, 1280, 900);
    stage.setScene(scene);
    stage.show();       

}

(我假设MainControllermainframe.fxml的控制器类的名称;显然只需根据需要进行调整。)