Я заметил, что установка пользовательского стиля шрифта для TextField в JavaFX также повлияет на его контекстное меню по умолчанию. Что я могу сделать, чтобы изменить шрифт пользовательского ввода, но сохранить пункты меню в контекстном меню, как они обычно отображаются?
.custom-text-field {
-fx-alignment: center;
-fx-font-size: 2.5em;
-fx-font-weight: bold;
-fx-font-family: monospaced;
}
Я ищу решение в стиле CSS, менять шрифт в Java-коде не хочу.
документация компонента TextField оказалась малопригодной.
К сожалению, проверка стиля CSS по умолчанию в caspian.css мне не очень помогла.





Причина, по которой это происходит, заключается в том, что контекстное меню является (прямым) потомком своего элемента управления (см. документацию для ContextMenu ), а значение по умолчанию для шрифта наследуется, поэтому по умолчанию контекстное меню будет наследовать шрифт из элемента управления, к которому он прикреплен.
Один из способов — специально сбросить стиль контекстного меню:
.custom-text-field {
-fx-alignment: center;
-fx-font-size: 2.5em;
-fx-font-weight: bold;
-fx-font-family: monospaced;
}
.custom-text-field > .context-menu * {
-fx-font: null;
}
Если вы хотите «глобально» применить правило «не наследовать шрифты контекстного меню от их элемента управления», следующее более общее правило CSS сделает это:
.context-menu {
-fx-font: null;
}
(При этом будет удалено значение inherit для шрифта контекстного меню.)
@user1438038 user1438038 Я не верю в это (хотя могу ошибаться), потому что значением по умолчанию для свойств шрифта является наследование их от родителя. Следовательно, изменение шрифта текстового поля изменит его для всех потомков.
@user1438038 user1438038 Также обратите внимание: если это немного лучше соответствует вашим потребностям, вы можете быть немного менее конкретны с селектором контекстного меню: .context-menu { -fx-font:null;} заставит все контекстные меню использовать шрифт платформы по умолчанию вместо предположения inherit; то есть он не позволит шрифту в любом элементе управления переопределять шрифт в его контекстном меню.
Я бы предпочел не применять это правило во всем мире, но полезно знать. Я буду придерживаться сброса контекстного меню только для этого конкретного поля ввода. Еще раз спасибо!
Это сработает, спасибо! Но нам нужно явно переопределить/восстановить стиль контекстного меню, нет более специфичного CSS-селектора, позволяющего изменить только шрифт поля ввода (не беспокоясь о сбросе шрифта контекстного меню)?