我正在尝试删除选中JavaFX按钮时默认显示的边框发光(请参阅下面的屏幕截图):
我也想使用CSS,而不是在主JavaFX脚本中声明性地执行此操作。但是,我无法弄清楚我需要使用什么CSS属性(呃,设置为0?)才能删除该边框。
答案 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中进行编辑要干净得多。