JavaFX TableView многострочная подсказка с фабрикой ячеек и привязками - PullRequest
0 голосов
/ 30 сентября 2018

Я использую этот фрагмент кода для создания всплывающих подсказок для каждой ячейки tableView, которую я распространяю через фабрики ячеек:

    private <T> void addFileTooltipToCells(TableColumn<FileTableBean,T> column) {
Callback<TableColumn<FileTableBean, T>, TableCell<FileTableBean,T>> existingCellFactory  = column.getCellFactory();
    column.setCellFactory(c -> {
        TableCell<FileTableBean, T> cell = existingCellFactory.call(c);
        Tooltip tooltip = new Tooltip();
        tooltip.textProperty().bind(cell.itemProperty().asString());
        tooltip.setShowDuration(Duration.seconds(30)); 
        tooltip.setStyle("-fx-font-size: 12");
        cell.setTooltip(tooltip);
        return cell;
    });
}

Проблема заключается в том, что иногда всплывающие подсказки могут содержать много данных и должны быть многопоточными.Отсюда я обнаружил, что нужно просто обернуть всплывающие подсказки и, возможно, установить
там, где это необходимо.Однако вышеприведенный фрагмент кода, тщательно скопированный и проверенный методом проб и ошибок, не нравится этой идее.Я попытался:

tooltip.textProperty().bind("<html>"+cell.itemProperty().asString()+"</html>");
tooltip.setText("<html>"+cell.itemProperty().asString()+"</html>");

Первый говорит в IDE: Несовместимая строка не может быть преобразована в ObservableValue Второй один генератор следующие всплывающие подсказки: "Привязка строки [недействителен]":)

И до того, как кто-то запускаетс обычным «сообщением об ошибке все сказано, прочитайте это», я знаю, что, возможно, есть простой ответ на этот вопрос, но, объединяя эти лямбды с концепцией связывания и клеточными фабриками, я просто должен сдаться и попытаться получитьнекоторые указания отсюда.

1 Ответ

0 голосов
/ 30 сентября 2018

Ответ тем, кто сталкивается с той же проблемой.Вы можете использовать «нормальную» привязку, но просто применить настройки всплывающей подсказки к каждой всплывающей подсказке, которую создает фабрика клеток, просто определив:

tooltip.setMaxWidth(750);
tooltip.setWrapText(true);

Установка предпочтительной ширины создаст всплывающие подсказки с множеством дополнительных пробелов, если данные короче, чемширина.Максимальная ширина работает как шарм.Следующим шагом, вероятно, будет динамический параметр width, чтобы он вычислял максимальную ширину на основе разрешения сцены.

...