es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se utiliza una TableView de JavaFX con registros de java?

Los registros de Java son una nueva característica en Java15. Supongamos que tienes un registro como este.

Esta es una clase final. Genera automáticamente los métodos de obtención first(), last(), y age().

Ahora aquí está un TableView en JavaFX.

El problema está aquí.

La TableView está esperando métodos con nombres getFirst, getLast y getAge para hacer su trabajo. ¿Hay una solución alternativa además de hacer esto horrible?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay un método alternativo para este problema. En lugar de agregar los métodos getter al registro, podemos usar la anotación @JsonProperty de la biblioteca Jackson para especificar nombres alternativos para el componente del registro. Así es como podemos modificar el registro Person:

    import com.fasterxml.jackson.annotation.JsonProperty;
    
    public record Person(
            @JsonProperty("last") String last,
            @JsonProperty("first") String first,
            @JsonProperty("age") int age
    ) {
        public Person() {
            this("", "", 0);
        }
    }
    

    Con esta modificación, las columnas de la tabla lastColumn, firstColumn y ageColumn pueden definirse de la siguiente manera:

    TableColumn<person, string=""> lastColumn = new TableColumn<>("Last");
    lastColumn.setCellValueFactory(new PropertyValueFactory<>("last"));
    
    TableColumn<person, string=""> firstColumn = new TableColumn<>("First");
    firstColumn.setCellValueFactory(new PropertyValueFactory<>("first"));
    
    TableColumn<person, integer=""> ageColumn = new TableColumn<>("Age");
    ageColumn.setCellValueFactory(new PropertyValueFactory<>("age"));
    

    Observe que el constructor PropertyValueFactory toma un argumento de cadena que corresponde al nombre alternativo especificado con la anotación @JsonProperty. De esta manera, podemos evitar agregar métodos getter innecesarios a la clase de registro.</person,></person,></person,>

Comments are closed.