Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - xavilop21

#1
Hola a todos,
soy novato en esto de JavaFX y se me plantea la duda de cómo puedo hacer que un componente TableView actualice la colección de objetos de que se compone cuando hago una inserción de un nuevo objeto desde un Stage diferente al del TableView. El método de inserción se encuentra en un controlador diferente al controlador del TableView.

En el controlador de la vista de inserción tengo este método de inserción que inserta el objeto correctamente en la BBDD:

Código: php
public void insertarMarca(){

        //Creación del objeto a insertar
        Marca m = new Marca(
                0,
                Integer.valueOf(txtCodigoMarca.getText()),
                txtNombreMarca.getText()
        );
       
       
        //Obtención de la fila a insertar
        Conexion conexion = new Conexion();
        conexion.establecerConexion();
        int resultado = m.insertarMarca(conexion.getConnection());
        conexion.cerrarConexion();
       
        if(resultado == 1){
           
            listaMarca.add(m);

            MarcaController mc = new MarcaController();
            mc.actualizarDatosMarca();
           
            Alert alerta = new Alert(AlertType.INFORMATION);
            alerta.setTitle("Registro agregado");
            alerta.setHeaderText("");
            alerta.setContentText("El registro ha sido agregado con éxito");
            alerta.show();
       
            System.out.println("InsertarMarca-fxml -> Lista de objetos de la clase Marca: " + listaMarca);
           
            stageInsertarMarca.close();
             
        }

Para almacenar los objetos utilizo el ObservableList listaMarca donde compruebo por consola que efectivamente el objeto se añade a la colección.

En el controlador de la tabla tengo el método siguiente:

Código: php
public void actualizarDatosMarca(){
       
        listaMarca.clear();
       
        InsertarMarcaController controller = new InsertarMarcaController();
        listaMarca = controller.getListaMarca();

        System.out.println("Objetos de la clase Marca -> Marca.fxml " + listaMarca);

        Conexion conexion = new Conexion();
        conexion.establecerConexion();
        Marca.mostrarMarca(conexion.getConnection(), listaMarca);
        tblMarca.setItems(listaMarca);
       
        conexion.cerrarConexion();

    }


El método getListaMarca() contiene toda la colección de objetos que quiero mostrar en el TableView. Compruebo que efectivame puedo recuperar la colección completa de objetos que incluye el último objeto creado desde el otro controlador, pero no consigo que la tabla se actualice con el último valor cuando se realiza la inserción,es decir, la idea es que cuando pulse sobre el botón Aceptar del controlador que contiene el método de inserción, la tabla se actualice automáticamente con el nuevo valor.

Si este método lo llamo desde un botón del TableView, la colección se actualiza correctamente, pero no lo hace de manera automática.

He probado a implementar listeners del tipo: new ChangeListener<Marca>(), new ListChangeListener<Marca>() pero sigo con igual resultado.

Por favor, ¿podrían ayudarme?

Muchas gracias de antemano.