Как удалить свечение границы по умолчанию кнопки JavaFX (при выборе)?

Я пытаюсь удалить свечение границы (см. скриншот ниже), которое появляется по умолчанию, когда выбрана кнопка JavaFX:

The blue border is the default styling by JavaFX for when the the button is selected

Я также хочу сделать это с помощью CSS, а не декларативно из основного сценария JavaFX. Тем не менее, у меня возникли проблемы с выяснением, какое свойство CSS мне нужно использовать (er, установлено в 0?) для того, чтобы удалить границу.

5 ответов


чтобы удалить дисплей кольца фокусировки из любого элемента управления из кода:

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 поставляется с новой таблицей стилей агента пользователя по умолчанию (Модены). Эта новая таблица стилей агента пользователя поставляется с дополнительной настройкой для основных моментов фокусировки:-fx-faint-focus-color. Для приложений Java 8 необходимо установить оба -fx-focus-color и -fx-faint-focus-color прозрачным, чтобы удалить все следы фокуса. См. ответ good4m на этот вопрос.

Обновление Dec 10, 2015

если вы только установите цвета фокуса на прозрачный, как ранее рекомендовалось в этом ответе, для некоторых элементов управления вы можете увидеть некоторое тонкое различие между тем, когда элемент управления сфокусирован и когда это не так. Для многих приложений это не будет проблемой, и установка цветов фокуса на прозрачный будет достаточной.

для получения дополнительной информации и альтернативных решений просмотрите ответ James_D на удалить синюю рамку с входа JavaFX поле и сообщение в блоге Йенса Детера о Как избавиться от подсветки фокуса в JavaFX. Имейте в виду, что ссылка на блог Йенса Детера, к сожалению, имеет некоторые раздражающие всплывающие окна.


-fx-focus-color: transparent;
-fx-faint-focus-color: transparent;

есть несколько способов сделать это. Ты можешь попробовать все это.

button.setStyle("-fx-focus-color: transparent;");

или

.button{
    -fx-focus-color: transparent;
}

или

.button:focused{
     -fx-focus-color: transparent;
}

Если вы хотите удалить это кольцо фокусировки в JavaFX 8, перепишите селектор: focus с помощью .стиль селектора кнопок из Модены.стиль 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;
}

ответ от Стелиос Adamantidis правильно, что

.button:focused {
  -fx-background-insets: 0, 0, 1, 2;
}


вот мое объяснение:

Например, определение

-fx-background-color: red, green, deepskyblue, blue;

кажется, определяют четыре слоя цвета фона, с красным, как цвет для слоя backmost.

например определение

-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 вы можете найти here:
http://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html