JavaFX 中控件周围的蓝色轮廓用于指示哪个控件具有焦点。
焦点指示符是跨不同 UI 框架使用的常见习语,不仅限于 JavaFX。在传统的基于鼠标/键盘的输入设置中,需要有一些指示当按下一个键时击键将被发送到哪里。想象一下,一个表单上有多个字段、几个文本字段和几个按钮。如果用户键入了一些字符——系统如何知道将字符插入到哪个文本字段中?同样,如果用户按下返回来激活一个按钮,哪个按钮会被激活?答案是当前具有焦点的按钮或字段将接收输入。通常可以通过按 Tab 键切换到新字段或用鼠标按下不同的字段来更改焦点。然而,即使系统知道哪个字段具有焦点,重要的是向用户提供反馈以让用户知道哪个字段具有焦点。这样,当用户键入时,他们就知道输入将被引导到哪里。
在 JavaFX 中,您在按钮周围看到的蓝色轮廓是一个视觉指示器,表明该按钮具有焦点,如果您按空格键,该按钮的操作将被触发,而不是其他按钮。当您在另一个按钮上单击鼠标时,它将触发另一个按钮的操作并将焦点转移到该按钮,因此如果您随后按下空格,最后单击的按钮将再次被操作。
JavaFX 中使用 JavaFX 8 附带的默认 modena.css 样式表的控件的焦点颜色可以由几个 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中的一个简单表格:
用户名文本输入字段周围的蓝色环表示文本输入将进入该字段。
是否有正确的方法可以仅通过我的项目按钮禁用对焦环?
如果您只想为按钮和项目中的所有按钮禁用焦点反馈,并且不影响其他控件,那么您可以为此定义样式表规则:
.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()
);