我开始学习Javafx,我发现了这个"奇怪的"特征。我用两个按钮做了一个简单的窗口。当我按下其中一个时,会出现蓝色笔划并保持不变直到我按下另一个按钮。除了知道最后按下哪个按钮之外,我无法找到任何合理用途。即使从用户体验的角度来看,它也没有意义。我已经尝试过以某种方式去激活"它通过CSS但没有运气。对此有什么解决方案吗?
答案 0 :(得分:1)
如果没有代码,很难说出你在搜索什么。 但我认为你指的是当前焦点菜单项的视觉标记。此功能用于用户点击“Tab”-Key以浏览菜单项的情况。
您可以通过取消选中“属性”标签中的“焦点可遍历”选项来禁用此项功能。这也将禁用标签导航!
已经有一个线程可以为这个主题提供解决方案。见:Remove Focus Box Around TextField
它讨论了使用css禁用焦点颜色,同时使用此css样式规则保留标签导航功能:
-fx-focus-color: transparent;
(来源:Uluk Biy在链接主题中的答案)
答案 1 :(得分:1)
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选择器的工作原理,那么Web上有许多可以搜索和阅读的资源。 Oracle提供了getting started tutorial如何为场景设置自定义CSS样式。相关代码行是将您的用户样式表添加到场景中:
scene.getStylesheets().add(
MyApplication.class.getResource(
"my-stylesheet.css"
).toExternalForm()
);