Скрыть строку в JavaFX Tableview с помощью FX-CSS?

У меня возникла эта проблема, когда у меня есть приложение JavaFX, которое использует представление таблицы, состоящее из столбцов таблиц, и оформлено с помощью пользовательского css.

Все работает отлично, и я могу плавно добавлять данные в свои таблицы/ячейки и т. д. Однако, если я хочу предоставить пользователю только частичные данные, решение css было бы оптимальным (вместо манипулирования данными в соответствии с требованиями пользователей).

Я изучал стандартный css и обнаружил, что «отображение: нет» было бы оптимальным решением для скрытия выбранных строк, но сохранения данных нетронутыми, но, похоже, для JavaFX это не поддерживается.

Кажется, я не могу найти хорошего решения, кроме методов ручного взлома, которые изменяют данные ячеек в соответствии с потребностями.

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

Кто-нибудь сталкивался с подобной проблемой и нашел практическое решение?


person jensd    schedule 24.06.2015    source источник
comment
Почему вы хотите скрыть выбранную строку? Почему просто удалить его из списка элементов недостаточно?   -  person Uluk Biy    schedule 24.06.2015
comment
Чтобы отобразить частичные данные, вы обычно заключаете данные таблицы в FilteredList и измените предикат в отфильтрованном списке. Таким образом, ваши базовые данные останутся нетронутыми, но отображаемые данные могут отличаться.   -  person James_D    schedule 24.06.2015
comment
Да, это мое решение на данный момент, однако мне придется использовать довольно сложные способы манипулирования этими данными (свертывание некоторых сообщений и т. д.), и я надеялся, что CSS сможет сделать эту работу намного проще и эффективнее. Однако кажется, что для JavaFX-css нет обходного пути css.   -  person jensd    schedule 24.06.2015
comment
Было бы намного сложнее применить логику для управления css, чем применить логику для управления FilteredList. FilteredList предназначен для этого варианта использования; CSS нет.   -  person James_D    schedule 24.06.2015


Ответы (2)


Если вы хотите использовать CSS

Каждый Node имеет свойство visibility css
Справочник по JavaFX CSS
Итак, я бы попробовал:

visibility: hidden;

Но я не знаю, скрывает ли он всю строку или что, если будут проблемы, вы можете скрыть внутреннюю Label в каждой ячейке


РЕДАКТИРОВАТЬ:

А как насчет этого обходного пути:

-fx-text-fill: transparent;

для каждой строки или Label
Это «скрывает» текст, но строка остается видимой
Не тестировалось, просто идея


РЕДАКТИРОВАТЬ (2):

Это может помочь:

-fx-cell-size: 0;

Для каждой ячейки в строке
Но это часть вашей собственной идеи

person maskacovnik    schedule 24.06.2015
comment
Итак, я попытался использовать это, и кажется, что visibility:collapse; делает трюк, по крайней мере, при манипулировании всей колонкой. Я попытаюсь использовать это, чтобы увидеть, можно ли манипулировать одной строкой таким же образом. Спасибо! - person jensd; 24.06.2015
comment
При ближайшем рассмотрении ни это исправление, ни visibility:hidden|collapse не удаляют фактическое пространство, которое оно использует, что делает его использование в моем случае бесполезным. - person jensd; 24.06.2015
comment
Я думаю, вы неправильно поняли мои намерения. Я хочу, чтобы строка исчезла визуально. Я пытаюсь использовать вашу отредактированную реализацию в сочетании с установкой фактического размера ячейки на 0, но без особого успеха. - person jensd; 24.06.2015
comment
Итак, мои идеи ушли :/, но ваш способ с 0 высотой может решить проблему. поэтому попробуйте установить -fx-cell-size на 0 docs .oracle.com/javafx/2/api/javafx/scene/doc-files/ @jensd - person maskacovnik; 24.06.2015
comment
Почему вы все ссылаетесь на старый справочник JavaFX CSS? Если вы используете Java 8, они добавили намного больше, поэтому посмотрите здесь: docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/ - person aw-think; 24.06.2015
comment
Ничто из вышеперечисленного не сработало для меня (с TreeTableView) при попытке скрыть пустые строки внизу, которые могут появиться при сворачивании узлов. Это прекрасно работает: .tree-table-row-cell:empty { -fx-opacity: 0; } - person jazzwhistle; 22.12.2018

Свойства -fx-visibility CSS нет, но вы можете обойти его, используя комбинацию вещей, например:

-fx-pref-width: 0;
-fx-opacity: 0;
person Alessandro Roaro    schedule 26.03.2020