Estoy experimentando un problema al cambiar el tamaño de un formato tableview que contiene elementos de texto que se envuelven alrededor de TableCell elementos. Sobre el cambio de tamaño, los valores ocultos se cambia el tamaño, pero los elementos visibles no vuelva a calcular el ajuste de texto.

JavaFX TableColumn ajuste de texto

Los tweets en el cuadro rojo se oculta durante el cambio de tamaño y su ajuste de texto ajustado como se esperaba. Tweets por encima de la caja eran visibles durante el cambio de tamaño de fase y todavía tener la edad de envolver.

A continuación es mi código para el tamaño de fase.

fxSearchResultsTableTweet.setCellFactory(new Callback<TableColumn<Status, String>, TableCell<Status, String>>() {
        @Override
        public TableCell<Status, String> call(TableColumn<Status, String> arg0) {
            return new TableCell<Status, String>() {
                private Text text;

                @Override
                public void updateItem(String item, boolean empty) {
                    super.updateItem(item, empty);
                    if (!isEmpty()) {
                        text = new Text(item.toString());
                        text.setWrappingWidth(fxSearchResultsTableTweet.getWidth());
                        this.setWrapText(true);

                        setGraphic(text);
                    }
                }
            };
        }
    });
}

Cualquier ayuda sería muy apreciada.

  • Trate de text.wrappingWidthProperty().bind(widthProperty());. El widthProperty es el ancho de la celda. Yo se burló de esto rápidamente, y el ancho se comporta correctamente, aunque la altura no.
  • Que interesante, funciona de la misma para mí también. ¿Tiene usted alguna idea acerca de cómo solucionar la altura problema?
  • No. Se comporta realmente muy mal con respecto a la selección. Si utiliza un valor predeterminado TableCell y enlazar el texto a la celda del elemento de propiedad (voy a publicar el código) que te parece mejor, pero aún no es perfecto.
  • Tenga en cuenta que si usted está usando un Text en lugar de un Label como aquí, usted puede utilizar -fx-font-smoothing-type: LCD; para evitar el aliasing problemas si el texto es pequeño.
InformationsquelleAutor Steve | 2014-03-29

2 Comentarios

  1. 15

    Esto está más cerca, pero no genial:

        textCol.setCellFactory(new Callback<TableColumn<Status, String>, TableCell<String, String>>() {
    
            @Override
            public TableCell<Status, String> call(
                    TableColumn<Status, String> param) {
                TableCell<Status, String> cell = new TableCell<>();
                Text text = new Text();
                cell.setGraphic(text);
                cell.setPrefHeight(Control.USE_COMPUTED_SIZE);
                text.wrappingWidthProperty().bind(cell.widthProperty());
                text.textProperty().bind(cell.itemProperty());
                return cell ;
            }
    
        });

    En el punto 2.2 de esta forma se muestra el mal de altura cuando se agregan nuevos elementos a la tabla, a continuación, en cambiar el tamaño de las células son de tamaño correctamente. En 8 es casi perfecto, sólo parece un error después de que el primer elemento es agregado (al menos en mi mock-up).

    Como se señaló en los comentarios,

    textCol.setCellFactory(tc -> {
        TableCell<Status, String> cell = new TableCell<>();
        Text text = new Text();
        cell.setGraphic(text);
        cell.setPrefHeight(Control.USE_COMPUTED_SIZE);
        text.wrappingWidthProperty().bind(textCol.widthProperty());
        text.textProperty().bind(cell.itemProperty());
        return cell ;
    });

    parece funcionar mejor.

    • Funciona como un encanto si se unen el ancho del Texto para las columnas widthProperty en lugar de la célula.widthProperty. Basta con sustituir «de texto.wrappingWidthProperty().bind(célula.widthProperty());» con texto».wrappingWidthProperty().bind(textCol.widthProperty());»
    • Si desea que el ajuste que se responda: text.wrappingWidthProperty().bind(textCol.widthProperty());
  2. 0

    Acaba de agregar células de fábrica en cada tabla de la columna.
    Se debe agregar antes de agregar los datos a la vista de la tabla.
    Se trabajó muy bien para mí.

        yourTableColumn.setCellFactory(param -> {
            return new TableCell<YourDataClass, String>() {
                @Override
                protected void updateItem(String item, boolean empty) {
                    super.updateItem(item, empty);
    
                    if (item == null || empty) {
                        setText(null);
                        setStyle("");
                    } else {
                        Text text = new Text(item);
                        text.setStyle("-fx-text-alignment:justify;");                      
                        text.wrappingWidthProperty().bind(getTableColumn().widthProperty().subtract(35));
                        setGraphic(text);
                    }
                }
            };
        });

Dejar respuesta

Please enter your comment!
Please enter your name here