2015-04-22 141 views
0

我已经开始学习Javafx,并且发生了这种“奇怪”的功能。我用两个按钮制作了一个简单的窗口。当我按下其中一个时,出现一个蓝色笔画并保持在那里直到我按下另一个按钮。除了知道最后按下哪个按钮之外,我找不到合理的用途。即使从用户体验的角度来看,这也没有意义。我尝试了某种方式来“停用”它通过CSS,但没有运气。有没有解决方案?Javafx按钮保持“启用”状态

+0

在没有看到代码,没有 – Reimeus

+0

你可以添加你所编写的代码? – ItachiUchiha

回答

1

很难告诉你在没有代码的情况下搜索什么。 但我想你是指当前集中菜单项目的可视标记。此功能用于用户点击“Tab”键以浏览菜单项的情况。

您可以通过在“属性”选项卡中取消选中“Focus Traversable”选项来禁用该功能。这也将禁用标签导航!

已经有一个线程完全针对此主题提供解决方案。请参阅:Remove Focus Box Around TextField

它谈论禁止使用CSS的焦点颜色,而通过使用该CSS样式规则保持标签导航功能:

-fx-focus-color: transparent; 

(来源:Uluk BIY的链接话题的答案)

1

JavaFX中围绕控件的蓝色轮廓表示哪个控件具有焦点。

焦点指标是在不同的UI框架中使用的常用惯用法,并非只针对JavaFX。在传统的基于鼠标/键盘的输入设置中,需要指示按下按键时将发送按键的位置。想象一下,表单上有多个字段,几个文本字段和几个按钮。如果用户键入一些字符 - 系统如何知道在哪个文本字段中插入字符?同样,如果用户按下返回来激活按钮,哪个按钮将被激活?答案是,当前拥有焦点的按钮或字段将接收输入。通常可以通过按Tab键将选项卡改为新的字段或使用鼠标按下不同的字段来改变焦点。但是,即使系统知道哪个字段具有焦点,向用户提供反馈以让用户知道哪个字段具有焦点也很重要。这样,当用户输入时,他们就会知道输入的位置。

您在JavaFX中的按钮周围看到的蓝色轮廓是一个视觉指示器,指出该按钮具有焦点,并且如果按空间,该按钮的动作将被触发,而不是其他按钮。当您在另一个按钮上单击鼠标时,它将同时触发另一个按钮的操作并将焦点转移到该按钮,所以如果您随后按下空格键,最后一次单击的按钮将再次启动。

JavaFX中使用JavaFX 8附带的默认modena.css样式表的控件的焦点颜色可以由一些css属性控制,您可以在用户样式表中为应用程序覆盖(通过定义在.root {} CSS样式类的属性:

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

但是,删除焦点颜色指标可能会:

/* 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; 

所以,举例来说,你可以删除所有使用集中的颜色从您的应用程序使您的应用程序更不直观,更难理解。

让我们来看一个简单的形式,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

我完全理解聚焦环对文本输入字段或当您按Tab键时的必要性。但是在按钮上,当你用鼠标按下时,我认为这是没有必要的。例如,在WPF应用程序中,这不会发生。没有任何焦点。另外,从其他线程的答案中,他们说你改变了modena.css文件。但是,如果你这样做,你禁用所有控件的对焦环,我不想(仅从按钮)。另外,他们说你可以创建一个CSS类并将它应用到你的按钮上,但我觉得这很费时间。 @codingquicktips – paul

+0

有没有正确的方法来禁用只从我的项目按钮的对焦环? – paul

+1

如果你点击一个按钮,那个按钮就会有焦点,并保留它。如果您然后按下相应的按键激活按钮(大多数系统上的空间),然后再次按下按钮。对于用户而言,如果没有指出按下空格键会导致与正在执行的按钮相关联的操作的事实,那将是一个非常糟糕的用户体验。如果你真的想把它关掉(你*真的*,***真的不这样做),你可以通过重写'.button:focused'规则在CSS中这样做。 –