java - 单击 Javafx 2.2 选项卡中的保存/取消按钮时如何关闭该选项卡?

标签 java javafx fxmlloader

我有一个 JavaFX 2.2 项目,它使用 Tabpane 动态打开/关闭选项卡。我想在单击选项卡上的保存/关闭按钮时关闭选项卡。

这可能吗?

我虽然可以很容易地得到答案,但不得不说这是fxml项目Javafx 2.2,涉及3个类,主类,mainclassController和tabcontroller,如下所示:

“main”=principal.java

public Tab abaUsuario(String nome) {

    try{
    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(Principal.class.getResource("controls/novoUsuarioForm.fxml"));
    AnchorPane novoUsuario = (AnchorPane) loader.load();
    //UsuarioDAO usrDAO = new UsuarioDAO();
    //Usuario usr = new Usuario();

    NovoUsuarioFormController nvu = new NovoUsuarioFormController();
    nvu.setMainApp(this);    

    Tab t = new Tab(nome);
    t.setContent(novoUsuario);        
    return t;
}catch (IOException ex ) {
        Dialogs.showErrorDialog(primaryStage, ex.getMessage() , "Erro ao inserir Usuário", "JANELA DE ERRO");
        //ex.getCause().printStackTrace();
    }
    return null;}

 public void closeTab(){
    baseWindowcontroller.closeUsuarioTab();

}

“mainController”=baseWindowController.java

@FXML
private void handleNovoUsuário(){       

    novoUsuarioTab = prime.abaUsuario("Novo usuario");
    novoUsuarioTab.setClosable(true);
   //  int numtab = tab_base.getTabs().size();
    // System.out.println(numtab);
     tab_base.getTabs().add(novoUsuarioTab);          
     tab_base.getSelectionModel().selectLast();

     //numtab = tab_base.getTabs().size();                
}
public void  closeUsuarioTab(){
  // if (tab_base.getSelectionModel().isEmpty()){
           // tab_base.getTabs().removeAll(novoUsuarioTab);
           // tab_base.getTabs().remove(1);
           //tab_base.getTabs().remove(novoUsuarioTab);
  // }
  Platform.runLater(new Runnable() {
        @Override public void run() {
            tab_base.getTabs().remove( tab_base.getSelectionModel().getSelectedIndex()); 
        }  
   });      
}  

“tabController”= NewUserFormController.java

 @FXML private void handlebtCancelar(){  
           prime.closeTab();} 

质数=本金

我已经将Principal.java设置为 Controller 的mainApp

如你所见,我尝试了很多可能性。

最佳答案

您可以假设将在当前 Activity 选项卡上单击该按钮,因此关闭此 Activity 选项卡。执行按钮操作:

tabPane.getTabs().remove( tabPane.getSelectionModel().getSelectedIndex() );

编辑:
它不起作用,因为您没有使用由 FXMLLoader 创建的 Controller ,您的 abaUsuario() 方法应该是

public Tab abaUsuario( String nome )
{
    try
    {
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation( Principal.class.getResource( "controls/novoUsuarioForm.fxml" ) );
        AnchorPane novoUsuario = ( AnchorPane ) loader.load();
        //UsuarioDAO usrDAO = new UsuarioDAO();
        //Usuario usr = new Usuario();

        // NovoUsuarioFormController nvu = new NovoUsuarioFormController();

        NovoUsuarioFormController nvu = (NovoUsuarioFormController) loader.getController();
        nvu.setMainApp( this );

        Tab t = new Tab( nome );
        t.setContent( novoUsuario );
        return t;
    }
    catch ( IOException ex )
    {
        Dialogs.showErrorDialog( primaryStage, ex.getMessage(), "Erro ao inserir Usuário", "JANELA DE ERRO" );
        //ex.getCause().printStackTrace();
    }
    return null;
}

此外,关闭选项卡时您不需要执行Platform.runLater()

关于java - 单击 Javafx 2.2 选项卡中的保存/取消按钮时如何关闭该选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31017557/

相关文章:

java - 有没有办法在 JavaFX Webview 中指定用户代理样式表?

css - 将红色星号添加到 javafx 标签文本的开头

javafx - FXMLLoader 工厂方法可以用于用户定义的类吗?

java.lang.UnsatisfiedLinkError no *****.dll in java.library.path

java - 尝试将菜单添加到 TableViewer 的标题行(标题行)

java - 在 JavaFX-2 中居中一个不可调整大小的 Pane

java - FXMLLoader.load() 在 java 9 之前的风格中工作正常,但在模块中失败

java.lang.NullPointerException 它有效,但错误。试图找出错误

java - Guava 是否为身份平等提供 Predicates.is(T) (a la Predicates.equalTo(T t))?

来自 BaseClassLoader 的 java.lang.ClassNotFoundException : org. apache.commons.lang.StringUtils