2015-04-22 5 views
0

Я начал изучать Javafx, и я столкнулся с этой «странной» особенностью. Я сделал простое окно с двумя кнопками. Когда я нажимаю один из них, появляется синий штрих и остается там, пока я не нажму на другую кнопку. Я не могу найти логического использования этого, кроме как узнать, какая кнопка была нажата последним. Даже с точки зрения UX это не имеет смысла. Я как-то пробовал «деактивировать» его через CSS, но не повезло. Есть ли решение для этого?Кнопка Javafx остается «включенной»

+0

Не видя код, не – Reimeus

+0

Можете ли вы добавить код, который вы написали? – ItachiUchiha

ответ

1

Трудно сказать, что вы ищете без кода. Но я думаю, что вы имеете в виду визуальный маркер текущего сфокусированного пункта меню. Эта функция используется в ситуациях, когда пользователь нажимает «Tab» -Key, чтобы перемещаться по вашим пунктам меню.

Вы можете отключить эту функцию для элементов, сняв флажок «Фокусное перемещение» на вкладке «Свойства». Это также отключит навигацию по вкладкам!

Существует уже нить, которая имеет решение именно этой темы. См: Remove Focus Box Around TextField

Это говорит об отключении цвета фокуса с помощью CSS, сохраняя при этом вкладку функции навигации с помощью этого правила CSS стайлинга:

-fx-focus-color: transparent; 

(Источник: ответ улюк бий в связанной теме)

1

Синий контур вокруг элементов управления в JavaFX предназначен для указания того, какой элемент управления имеет фокус.

Индикаторы фокусировки - это распространенная идиома, используемая в разных средах пользовательского интерфейса, а не только для JavaFX. В традиционной настройке ввода на основе мыши/клавиатуры необходимо указать, где будет нажата клавиша при нажатии клавиши. Представьте, что в форме есть несколько полей, несколько текстовых полей и несколько кнопок. Если пользователь вводит некоторые символы - как система знает, в какое текстовое поле вставлять символы? Аналогично, если пользователь нажимает кнопку «вернуться», чтобы активировать кнопку, какая кнопка активируется? Ответ заключается в том, что кнопка или поле, которое в настоящее время имеет фокус, получит вход. Фокус можно изменить обычно, нажимая клавишу табуляции на вкладку на новое поле или нажимая на другое поле с помощью мыши. Однако, несмотря на то, что система знает, какое поле имеет фокус, важно предоставить пользователю обратную связь, чтобы пользователь знал, какое поле имеет фокус. Таким образом, когда пользователь вводит данные, они имеют некоторое представление о том, куда будет направляться вход.

То, что вы видите с синим контуром вокруг кнопки в JavaFX, является визуальным индикатором, чтобы отметить, что кнопка имеет фокус и, если вы нажмете пробел, действие этой кнопки будет запущено, а не какая-то другая кнопка. Когда вы нажимаете кнопку мыши на другой кнопке, она запускает действие другой кнопки и переносит фокус на эту кнопку, поэтому, если вы затем нажмете пробел, будет нажата последняя нажатая кнопка.

Цвет фокусировки для элементов управления в JavaFX, которые используют стандартную таблицу стилей modena.css, которая поставляется с JavaFX 8, может управляться несколькими свойствами css, которые вы можете переопределить в таблице стилей пользователя для вашего приложения (путем определения свойства в классе стиля .root {} CSS:

/* 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: #039ED3; 
-fx-faint-focus-color: #039ED322; 

Так, например, вы можете удалить все цвета фокус из приложения с помощью:

.root { 
    -fx-focus-color: transparent; 
    -fx-faint-focus-color: transparent; 
} 

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

Давайте посмотрим на простую форму в JavaFX:

form

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

Есть ли способ отключить кольцо фокусировки только от кнопок моего проекта?

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

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

Примечание: Я по-прежнему не рекомендую делать это, даже если другие используемые вами фреймворки не предоставляют фокусные кольца для кнопок.

Это приведет к переопределению цвета фокуса по умолчанию для кнопок, определенных в таблице стилей JavaFX 8 modena.css по умолчанию. Вам не нужно (и вы не должны) изменять таблицу стилей modena.css, чтобы переопределить значения в ней. Вы можете просто переопределить значения, используя более конкретное правило выбора CSS в таблице стилей вашего приложения. Если вам нужно понять, как работают селектор CSS, в Интернете есть множество ресурсов, которые вы можете искать и читать. Oracle предоставляет getting started tutorial о том, как вы можете настроить собственный стиль CSS для сцены. Соответствующий код линии, чтобы добавить пользователя в таблицу стилей сцены:

scene.getStylesheets().add(
    MyApplication.class.getResource(
     "my-stylesheet.css" 
    ).toExternalForm() 
); 
+0

Я полностью понимаю необходимость кольца фокусировки в текстовом поле ввода или при нажатии клавиши табуляции. Но на кнопке, когда вы нажимаете ее мышью, я думаю, что это не нужно. Например, в приложении WPF это не происходит. Никакое фокусное кольцо вообще. Кроме того, из ответов на другие темы, они говорят, что вы меняете файл modena.css. Но если вы это сделаете, вы отключите кольцо фокусировки от всех ваших элементов управления, и я не хочу этого (только с кнопок). Кроме того, они говорят, что вы можете создать класс CSS и применить его к своим кнопкам, но я нахожу это много времени. @codingquicktips – paul

+0

Есть ли способ отключить кольцо фокусировки только от кнопок моего проекта? – paul

+1

Если вы нажмете на кнопку, эта кнопка будет иметь фокус и сохранит ее. Если вы затем нажмете соответствующую клавишу, чтобы активировать кнопку, нажмите (Пробел на большинстве систем), затем снова будет нажата кнопка. Было бы очень плохо UX для пользователя не иметь никаких указаний на то, что нажатие пробела приведет к действию, связанному с выполняемой кнопкой. Если вы действительно хотите отключить это (вы действительно *, *** действительно ничего не делаете), вы можете сделать это в css, переопределив правила .button: focus. –

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