Nano Hash - криптовалюты, майнинг, программирование

Обтекание текста таблицы JavaFX TableColumn

У меня возникает проблема при изменении размера TableView, который содержит текстовые элементы, обтекающие элементы TableCell. При изменении размера скрытые значения изменяются, но видимые элементы не пересчитывают обтекание текстом.

Проблема.

Твиты в красной рамке были скрыты во время изменения размера, и их обтекание текстом было изменено, как ожидалось. Твиты над полем были видны на этапе изменения размера и по-прежнему имеют старую обертку.

Ниже приведен мой код для фазы изменения размера.

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);
                    }
                }
            };
        }
    });
}

Любая помощь будет принята с благодарностью.


  • Попробуйте text.wrappingWidthProperty().bind(widthProperty());. widthProperty - это ширина ячейки. Я быстро смоделировал это, и ширина ведет себя правильно, а высота — нет. 29.03.2014
  • Это интересно, у меня тоже так работает. Есть ли у вас какие-либо идеи о том, как решить проблему с высотой? 29.03.2014
  • Нет. На самом деле он ведет себя очень плохо в отношении выбора. Если вы используете TableCell по умолчанию и привязываете текст к свойству элемента ячейки (я опубликую код), это кажется лучше, но все же не идеально. 29.03.2014
  • Обратите внимание: если вы используете Text вместо Label, как здесь, вы можете использовать -fx-font-smoothing-type: LCD;, чтобы избежать проблем с псевдонимом, если ваш текст маленький. 13.10.2017

Ответы:


1

Это ближе, но не очень:

    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 ;
        }

    });

В 2.2 это отображает неправильную высоту, когда вы добавляете новые элементы в таблицу, а затем при изменении размера ячейки имеют правильный размер. В 8 это почти идеально, просто кажется, что он выходит из строя после добавления первого элемента (по крайней мере, в моем макете).

Как отмечается в комментариях,

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 ;
});

кажется, работает лучше.

29.03.2014
  • Это работает как шарм, если вы привязываете ширину текста к колонкам widthProperty вместо cell.widthProperty. Просто замените text.wrappingWidthProperty().bind(cell.widthProperty()); с text.wrappingWidthProperty().bind(textCol.widthProperty()); 17.09.2015

  • 2

    Просто добавьте фабрику ячеек в каждую таблицу столбца. Он должен добавляться перед добавлением ваших данных в табличное представление. У меня это работает нормально.

        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);
                    }
                }
            };
        });
    
    06.06.2019
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..