2013-08-22 2 views
3

В JavaFX2.2 я создал свой собственный класс стиля для представления ячеек таблицы, содержащих недопустимые данные. Но мой класс стиля кажется неспособным переопределить -fx-text-fill в hover, selected и focused. Вот мой класс стиля:JavaFX TableView: нельзя переопределить '-fx-text-fill'!

.invalid-table-cell { 
    -fx-text-fill: red; 
} 

.invalid-table-cell:hover { 
    -fx-background-color: salmon; 
    -fx-text-fill: blue; /* No worky */ 
} 

.invalid-table-cell:selected { 
    -fx-background-color: purple; 
    -fx-text-fill: orchid; /* No worky */ 
} 

.invalid-table-cell:focused:hover { 
    -fx-background-color: red; 
    -fx-text-fill: green; /* No worky */ 
} 

При запуске моего приложения, я могу видеть изменения в -fx-background-color, но я не вижу никаких изменений в -fx-text-fill ни в одном из особых состояний.

Что я делаю неправильно?

+0

Добавление '! Important' достигает желаемого эффекта, но мне интересно, почему мне нужно'! Important' вообще. –

ответ

0

Следуя совету jewelsea, я увеличил специфику своих правил CSS, чтобы соответствовать специфике соответствующих правил в capsian.css. Поскольку мне было любопытно, я увеличил специфику своих собственных правил с поправкой и обнаружил, что в моей ситуации не работает что-то менее конкретное, чем следующие правила.

.table-view:cell-selection .table-row-cell:filled .invalid-table-cell:hover { 
    /* Works! */ 
} 

.table-view:focused .table-row-cell:filled .invalid-table-cell:selected:focused { 
    /* Works! */ 
} 

.table-view:focused .table-row-cell:filled .invalid-table-cell:focused:selected:hover { 
    /* Works! */ 
} 
+0

Это все еще не работает для меня. Даже с '! Important'. – GGrec

+0

Этот ответ с 2013 года. С тех пор JavaFX сильно изменился. –

1

!important, скорее всего, требуется из-за specificity of your css rules в сравнении с правилами css стандартных таблиц caspian или modena (хотя мои навыки css ограничены с точки зрения оценки этого).

В SceneBuilder 1.1 есть css analyzer, который может помочь определить, какие правила и атрибуты css активируются. Это может помочь в отладке активации правил CSS в целом, хотя это не очень помогает в этом конкретном случае, к сожалению, поскольку вы не можете устанавливать стили на ячейки таблицы через SceneBuilder 1.1.

Один рабочий обход - это скопировать все правила css c-cse c-cse(), к сожалению, их очень много, и поместить правила в таблицу стилей пользователя. Подготовьте элемент выбора стиля .invalid-table-cell к каждой из правил таблицы css в таблице стилей пользователя и измените правила в соответствии с требованиями для достижения желаемого внешнего вида. Это гарантирует, что ваш набор правил имеет правильный уровень специфичности, чтобы переопределить правила по умолчанию. Это, к сожалению, довольно сложный процесс, и, возможно, ваши переопределения !important могут стать лучшим решением для вас.

Немного более простой способ настроить стили, чтобы переопределить предопределенные константы, например, что-то вроде ниже (я не пробовал и просто демонстрирует принцип как точный выбор и правила необходимо, может отличаться):

.invalid-table-cell { 
    -fx-selection-bar-text: goldenrod; 
} 

Поскольку большинство стилей ячейки таблицы по умолчанию определены с использованием -fx-text-fill: -fx-selection-bar-text;, просто установка этого значения в соответствующее значение позволяет переопределить все эти стили ячейки таблицы по умолчанию. Но он переопределяет их все к одному и тому же значению, поэтому, если вам нужны разные значения для разных psuedo-состояний css, как в вашем вопросе, тогда вам нужно будет определить эти правила явно, как описано ранее.

+0

Спасибо. Недостаточная специфичность в моих правилах CSS была моей проблемой. Теперь я уточняю свой вопрос с конкретным конкретным решением. –

Смежные вопросы