我正在深入研究通过 CSS 自定义控件,并且已经取得了很大进展。所以我可以通过例如完全自定义我的滚动条将轨道的背景设置为透明等。但我坚持使用 ScrollBarSkin(通过 ScenicViewer 进行调查)。看来这个皮肤有一个默认的背景颜色(渐变)和一个边框,我无法修改。 所以我的问题是,我如何访问例如TableCellSkin 或 ScrollBarSkin,通过 CSS 修改背景颜色和插图?
编辑:我正在使用jdk7
edit2:我在 caspian.css 中找到了 ScrollPaneSkin 的一些语法。我对滚动条和表格单元进行了相同的尝试:
ScrollBarSkin>* {
-fx-base: transparent;
-fx-border-color: #00ff00;
-fx-background-color: #0000ff;
}
但运气不佳。
根据jewelsea的答案找到了解决方案(谢谢伙伴!)
我创建了一个扩展 ScrollBarSkin 的新类,并且重写了 getSkinnable()。看起来像这样:
public class MyScrollBarSkin extends ScrollBarSkin{
public MyScrollBarSkin(ScrollBar scrollBar) {
super(scrollBar);
}
@Override
public Insets getInsets() {
// TODO Auto-generated method stub
return super.getInsets();
}
@Override
public ScrollBar getSkinnable() {
ScrollBar curr = super.getSkinnable();
curr.getSkin().getNode().setStyle("-fx-background-color: transparent;");
return curr;
}
}
在相应的 CSS 中,我将这个皮肤称为“jewelsea”。瞧瞧!
还有一个小问题:为什么我不能通过 css 直接访问这个组件?
最佳答案
ScrollBarSkin 是一个表示用于呈现 ScrollBar 的外观的类。以下是默认 JavaFX 样式表的摘录:
.scroll-bar {
-fx-skin: "com.sun.javafx.scene.control.skin.ScrollBarSkin";
}
这里是 ScrollBarSkin.java 的链接在 JavaFX 8 源存储库中。请注意,它是一个 com.sun 类,因此它不是公共(public) API 的一部分,并且可能会在次要 JavaFX 版本之间消失或更改 API,恕不另行通知。
您可以通过用户样式表中的以下 CSS 使用您自己的皮肤覆盖默认皮肤:
.scroll-bar {
-fx-skin: "com.mycompany.control.skin.CustomScrollBarSkin";
}
我刚刚设置了名称和路径,你可以使用任何你想要的。
皮肤允许对控件的外观进行编程控制(即,它只是偶然与 css 相关,因为 css 是在控件上设置皮肤的一种方法)。
Customizing Skins is documented (在某种程度上)在 OpenJFX wiki 中。
皮肤自定义依赖于一个名为 SkinBase 的新 JavaFX 8 类。 ,它构成了 javafx.scene.control 公共(public) API 的一部分。
不建议在低于 Java 8 的版本中自定义皮肤,因为那样您将使用旧的、未记录且不受支持的私有(private) API,这些 API 不适用于 Java 8 及更高版本。在 Java 8 中自定义皮肤很好,因为它依赖于公共(public) API。
从你的问题中我很确定这并不是你真正想要的,但它是你问题的答案(至少按照我的理解)。
关于css - JavaFX 2.2 : Modifying the skin style via css,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17791888/