Как удалить стандартное свечение границы кнопки JavaFX (если выбрано)?
Я пытаюсь удалить свечение границы (см. снимок экрана ниже), который появляется по умолчанию при выборе кнопки JavaFX:
![The blue border is the default styling by JavaFX for when the the button is selected]()
Я также хочу сделать это с помощью CSS, а не декларативно из основного JavaFX script. Однако мне трудно понять, какое свойство CSS мне нужно использовать (er, установить в 0?), Чтобы удалить эту границу.
Ответы
Ответ 1
Чтобы удалить отображение кольца фокусировки из любого элемента управления из кода:
control.setStyle("-fx-focus-color: transparent;");
Чтобы удалить кольцо фокусировки для всех элементов управления, примените таблицу стилей:
.root { -fx-focus-color: transparent; }
Чтобы удалить только кольцо для всех кнопок, используйте:
.button { -fx-focus-color: transparent; }
Я нахожу атрибут -fx-focus-color
более прямолинейным, чем полагаться на какую-то странную комбинацию вставок, чтобы удалить кольцо фокусировки.
Кроме того, вы можете использовать ту же настройку, чтобы изменить кольцо фокусировки на другой цвет, например -fx-focus-color: firebrick
.
Обновление 20 января 2015 г.
JavaFX 8 поставляется с новой таблицей стилей пользователя по умолчанию (modena). Эта новая таблица стилей пользовательского агента поставляется с дополнительной настройкой фокуса: -fx-faint-focus-color
. Для приложений Java 8 необходимо установить прозрачность для всех -fx-focus-color
и -fx-faint-focus-color
, чтобы удалить все следы кольца фокусировки. См. Good4m ответ на этот вопрос.
Обновление 10 декабря 2015 г.
Если вы настроили цвета фокуса на прозрачные, как было рекомендовано ранее в этом ответе, для некоторых элементов управления вы можете увидеть тонкое различие между тем, когда управление сосредоточено, а когда нет. Для многих приложений это не будет проблемой, и будет достаточно установить цвета фокуса на прозрачность.
Для получения дополнительной информации и альтернативных решений просмотрите ответ James_D на Удалить синий кадр из поля ввода JavaFX и сообщение в блоге Jens Deter о Как избавиться от фокуса в JavaFX. Имейте в виду, что ссылка на блог Jens Deter, к сожалению, вызывает некоторые раздражающие всплывающие окна.
Ответ 2
-fx-focus-color: transparent;
-fx-faint-focus-color: transparent;
Ответ 3
Существует несколько способов сделать это. Вы можете попробовать все это.
button.setStyle("-fx-focus-color: transparent;");
или
.button{
-fx-focus-color: transparent;
}
или
.button:focused{
-fx-focus-color: transparent;
}
Ответ 4
Если вы хотите удалить это кольцо фокусировки в JavaFX 8, перепишите селектор: focus с помощью стиля .button selector из modena.css.
.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;
}
Ответ 5
Ответ от Stelios Adamantidis правильный, который
.button:focused {
-fx-background-insets: 0, 0, 1, 2;
}
Вот мое объяснение:
Например, определение
-fx-background-color: red, green, deepskyblue, blue;
кажется, определяет четыре слоя фоновых цветов, красный - как цвет для заднего слоя.
Например, определение
-fx-background-radius: 0, 1, 4, 10;
устанавливает радиус для всех углов для каждого цветового слоя. Здесь красный слой имеет все углы с радиусом 0, зеленый слой имеет все углы с радиусом 1 и т.д.
Например, определение
-fx-background-insets: -10, 0, 3, 5;
устанавливает дополнение для цветных слоев. Вы также можете установить отрицательные значения, тогда цвет будет вокруг элемента управления.
Значения по умолчанию для кнопки выглядят примерно так:
.button:focused {
-fx-background-color: <blueGlowingColor>, <?>, <?>, linear-gradient(to bottom, <?>, <?>);
-fx-background-insets: -1, 0, 1, 2;
}
Установка первого значения вставки в 0 скрывает светящийся цвет за вторым цветом.
Подробнее о JavaFX CSS вы можете найти здесь:
http://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html