【问题标题】:Javafx button stays "enabled"Javafx 按钮保持“启用”状态
【发布时间】:2015-04-22 20:18:21
【问题描述】:

我已经开始学习 Javafx,并且偶然发现了这个“奇怪”的功能。我制作了一个带有两个按钮的简单窗口。当我按下其中一个按钮时,会出现蓝色笔划并一直停留在那里,直到我按下另一个按钮。除了知道最后按下哪个按钮之外,我找不到任何合乎逻辑的用途。即使从用户体验的角度来看,它也没有任何意义。我试图以某种方式通过CSS“停用”它,但没有运气。有什么解决办法吗?

【问题讨论】:

  • 没有看到代码,没有
  • 能把你写的代码加进去吗?

标签: java button javafx uibutton


【解决方案1】:

如果没有代码,很难说出您要搜索的内容。 但我认为您指的是当前聚焦菜单项的视觉标记。此功能用于用户点击“Tab”键来浏览菜单项的情况。

您可以通过取消选中“属性”选项卡中的“焦点遍历”选项来禁用项目的此功能。这也会禁用标签导航!

已经有一个线程对此主题有解决方案。见:Remove Focus Box Around TextField

它谈到了使用 css 禁用焦点颜色,同时使用此 css 样式规则保留选项卡导航功能:

-fx-focus-color: transparent;

(来源:Uluk Biy 在链接主题中的回答)

【讨论】:

    【解决方案2】:

    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()
    );
    

    【讨论】:

    • 我完全理解对焦环对文本输入字段或按 Tab 键的必要性。但是在一个按钮上,当你用鼠标按下它时,我认为这是不必要的。例如,在 WPF 应用程序中,不会发生这种情况。没有对焦环。此外,从其他线程的答案中,他们说您更改了 modena.css 文件。但是如果你这样做,你会从你的所有控件中禁用对焦环,我不想这样做(仅从按钮)。此外,他们说您可以创建一个 CSS 类并将其应用于您的按钮,但我发现这很耗时。 @codingquicktips
    • 是否有适当的方法可以仅通过我的项目按钮禁用对焦环?
    • 如果你点击一个按钮,那个按钮就会获得焦点,并保持它。如果您随后按下适当的键来激活按钮按下(在大多数系统上为 Space),则将再次按下按钮。如果用户没有任何迹象表明按下空格键会导致与按钮相关联的动作被执行,这将是一个非常糟糕的用户体验。如果你真的想关闭它(你真的真的不要),你可以通过覆盖@987654329在css中做到这一点@ 规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2014-09-04
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    相关资源
    最近更新 更多