如何删除JavaFX按钮的默认边框发光(选中时)?

时间:2011-05-23 03:19:25

标签: javafx

我正在尝试删除选中JavaFX按钮时默认显示的边框发光(请参阅下面的屏幕截图):

The blue border is the default styling by JavaFX for when the the button is selected

我也想使用CSS,而不是在主JavaFX脚本中声明性地执行此操作。但是,我无法弄清楚我需要使用什么CSS属性(呃,设置为0?)才能删除该边框。

6 个答案:

答案 0 :(得分:72)

从代码中的任何控件中移除聚焦环显示:

control.setStyle("-fx-focus-color: transparent;");

要删除所有控件的聚焦环,请应用样式表:

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

要仅删除所有按钮的响铃,请使用:

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

我发现-fx-focus-color属性设置比依赖一些奇怪的插图组合来移除焦点环更直接。

此外,您可以使用相同的设置将对焦环更改为其他颜色,例如-fx-focus-color: firebrick

2015年1月20日更新

JavaFX 8附带了一个新的默认用户代理样式表(modena)。这个新的用户代理样式表附带了焦点突出显示的附加设置:-fx-faint-focus-color。对于Java 8应用程序,必须将-fx-focus-color-fx-faint-focus-color都设置为透明以删除焦点环的所有痕迹。请参阅good4m对此问题的回答。

2015年12月10日更新

如果您只将焦点颜色设置为透明,如此答案中之前建议的那样,对于某些控件,您可能会看到控件聚焦和不控制时之间的细微区别。对于许多应用来说,这不是问题,将焦点颜色设置为透明就足够了。

有关更多信息和备用解决方案,请查看James_D对Remove blue frame from JavaFX input field和Jens Deter关于How to get rid of focus highlighting in JavaFX的博客文章的回答。请注意,遗憾的是,Jens Deter的博客链接有一些恼人的弹出窗口。

答案 1 :(得分:58)

-fx-focus-color: transparent;
-fx-faint-focus-color: transparent;

答案 2 :(得分:19)

有几种方法可以做到这一点。你可以尝试其中任何一个。

button.setStyle("-fx-focus-color: transparent;");

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

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

答案 3 :(得分:15)

如果要在JavaFX 8中删除此焦点环,请使用modena.css中的.button选择器样式重写:focus选择器。

.button:focused {
    -fx-background-color: -fx-outer-border, -fx-inner-border, -fx-body-color; 
    -fx-background-insets: 0, 1, 2;
    -fx-background-radius: 5, 4, 3;
}

答案 4 :(得分:8)

Stelios Adamantidis的答案是正确的,即

.button:focused {
  -fx-background-insets: 0, 0, 1, 2;
}


以下是我的解释:

例如定义

-fx-background-color: red, green, deepskyblue, blue;

似乎定义了四层背景颜色,红色作为最后一层的颜色。

例如定义

-fx-background-radius: 0, 1, 4, 10;

设置每个颜色图层的所有角的半径。这里,红色层的所有角都是半径0,绿色层的所有角都是半径为1,依此类推。

例如定义

-fx-background-insets: -10, 0, 3, 5;

设置颜色图层的填充。您也可以设置负值,然后颜色将围绕控件。

按钮的默认值似乎是这样的:

.button:focused {
  -fx-background-color: <blueGlowingColor>, <?>, <?>, linear-gradient(to bottom, <?>, <?>);
  -fx-background-insets: -1, 0, 1, 2;
}

将insets的第一个值设置为0可隐藏第二个颜色后面的发光颜色。

有关JavaFX CSS的更多信息,请访问:
http://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html

答案 5 :(得分:2)

要完全禁用此按钮,请选择“做”:

declare @projects table
(
    ProjectID   int,
    SOP     int,
    IncomeA     decimal(10,2),
    IncomeB     decimal(10,2)
)

declare @income table
(
    ProjectID   int,
    SOPOffset   int,
    Income      decimal(10,2)
)

insert into @projects
values  (1, 2021, 100000,    0),
        (2, 2022,   5000, 2000)

insert into @income
values  (1, 0, 1000),
    (1, 1, 2000),
    (2, 0, 1000),
    (2, 1,  500),
    (2, 2,  500)

; with income as
(
    select  ProjectID, SOPOffset, Income, 
            TotalOffset = count(*) over (partition by ProjectID)
    from    @income
)
select  year    = (p.SOP + i.SOPOffset),
       income   = SUM(  i.Income
                     +  ((p.IncomeA + p.IncomeB) / i.TotalOffset) )
from    @projects p
        inner join income i on  p.ProjectID = i.ProjectID
group by (p.SOP + i.SOPOffset)

比在CSS中进行编辑要干净得多。