Сегодня меня спросили, знаю ли я, как избавиться от выделения фокуса элементов управления JavaFX (соответственно кнопок):
Большинство постов и советов по этой проблеме предлагают добавить:
1
2
3
|
.button:focused { -fx-focus-color: transparent; } |
Но с этим стилем, сияние как это все еще остается:
Чтобы избавиться от этого свечения, также часто предлагается поиграть с -fx-background-insets
дополнительно:
1
2
3
4
|
.button:focused { -fx-focus-color: transparent; -fx-background-insets: - 1.4 , 0 , 1 , 2 ; } |
Но это приводит к кнопке, отображаемой без внешней границы:
По сравнению со стилем кнопок по умолчанию:
это все еще своего рода «выделение».
Почему это? (И почему на самом деле есть 4 значения вставки?)
Если посмотреть на стиль JavaFX по умолчанию, определенный modena.css
то modena.css
немного больше информации:
1
2
3
4
5
6
|
/* A bright blue for the focus indicator of objects. Typically used as the * first color in -fx-background-color for the "focused" pseudo-class. Also * typically used with insets of -1.4 to provide a glowing effect. */ -fx-focus-color: #f25f29; -fx-faint-focus-color: #f25f2933; |
Очевидно, что существует не только один цвет фокуса -fx-focus-color
но также -fx-faint-focus-color
который предназначен для создания этого эффекта свечения (который остается при установке -fx-focus-color:transparent;
).
Присмотритесь к псевдоклассу .button: focus (в modena.css
):
1
2
3
4
5
|
.button:focused { -fx-background-color: -fx-faint-focus-color, -fx-focus-color, -fx-inner-border, -fx-body-color; -fx-background-insets: - 2 , - 0.3 , 1 , 2 ; -fx-background-radius: 7 , 6 , 4 , 3 ; } |
Игра с какой-то экстремальной окраской раскрывает аранжировку:
01
02
03
04
05
06
07
08
09
10
|
.button:focused { -fx-focus-color: red; -fx-faint-focus-color: green; -fx-inner-border: blue; -fx-body-color: orange; -fx-background-color: -fx-faint-focus-color, -fx-focus-color, -fx-inner-border, -fx-body-color; -fx-background-insets: - 2 , - 0.3 , 1 , 2 ; -fx-background-radius: 7 , 6 , 4 , 3 ; } |
Возвращаясь к теме, может быть, умный способ убрать выделение фокуса — это использовать стили кнопок по умолчанию также для .button: focus (такой же подход для других элементов управления):
1
2
3
4
5
|
.button:focused { -fx-background-color: -fx-outer-border, -fx-inner-border, -fx-body-color; -fx-background-insets: 0 , 1 , 2 ; -fx-background-radius: 5 , 4 , 3 ; } |
Ссылка: | Как избавиться от выделения фокуса в JavaFX от нашего партнера JCG Дженса Детерса в блоге JavaFX Delight . |