Erro ao copiar Tabs Java fx

1 resposta
javaprogramação
R

Ola, Estou deselvovendo um aplicativo que em uma parte dele, tem que criar multiplos tabs, do mesmo tipo, no caso Painel, porem quando eu criava um novo tab, o painel do antigo sumia pq eu copiava do outro, e assim em segida, entao eu pesquisei e vi um cara que falou para criar um outra fxml para pegar o root dele e por no tab, mas isso tambem nao deu certo. alguem pode me ajudar?
Imagem dos tabs


Imagem do novo fxml

codigo

Tab tab = new Tab("NotSaved " + (numTabs + 1));
        
        try {
        FXMLLoader loader = new FXMLLoader();
        AnchorPane pane = loader.load(getClass().getResource("Assessment.fxml"));
        tab.setContent(pane);
        numTabs++; 
        } catch (Exception e) { System.out.println(e);}
        
        tabpane.getTabs().add(tab);

1 Resposta

J

Esse bloco está rodando corretamente
É que voce deve usar uma nova instancia de objeto para vincular um Node

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene; 
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.scene.control.*;
import javafx.scene.layout.AnchorPane;

/**
 *
 * @author jorge
 */
public class TabFX extends Application {
    
    int numTabs = 0;
    
    @Override
    public void start(Stage primaryStage) {
        
        TabPane tabpane = new TabPane();
        
        
        try {
           numTabs++; 
           FXMLLoader loader = new FXMLLoader();
           AnchorPane pane = loader.load(getClass().getResource("Assessment.fxml"));
           Tab tab = new Tab("NotSaved " + numTabs );
           tab.setContent(pane);
           tabpane.getTabs().add(tab); 

           
           
           // outro           
           numTabs++; 
           AnchorPane pane2 = loader.load(getClass().getResource("Assessment.fxml"));
           Tab tab2 = new Tab("NotSaved " + numTabs );
           tab2.setContent(pane2);  // caso coloque "pane" no lugar de "pane2" o Tab 1 ficará em branco, porque estará sendo usado para o tab2
           tabpane.getTabs().add(tab2); 
                   
          // pode ser assim tambem, mas veja que foram criadas novas instancias dos objetos
           numTabs++; 
           pane = loader.load(getClass().getResource("Assessment.fxml"));
           tab = new Tab("NotSaved " + numTabs );
           tab.setContent(pane);
           tabpane.getTabs().add(tab)

        } catch (Exception e) { 
            System.out.println(e);
        }
          
        Scene scene = new Scene(tabpane, 600, 250);
        
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
    
}
Criado 13 de dezembro de 2022
Ultima resposta 14 de dez. de 2022
Respostas 1
Participantes 2