我正在通过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直接访问此组件?
答案 0 :(得分:3)
ScrollBarSkin是一个表示用于渲染ScrollBar的外观的类。以下是默认JavaFX样式表的摘录:
.scroll-bar {
-fx-skin: "com.sun.javafx.scene.control.skin.ScrollBarSkin";
}
这是JavaFX 8源代码库中ScrollBarSkin.java的链接。请注意,它是一个com.sun类,因此它不是公共API的一部分,可能会在未经通知的情况下消失或更改次要JavaFX版本之间的API。
您可以通过用户样式表中的以下css覆盖自己皮肤的默认外观:
.scroll-bar {
-fx-skin: "com.mycompany.control.skin.CustomScrollBarSkin";
}
我刚刚创建了名称和路径,你可以使用你想要的任何东西。
皮肤允许的是对控件外观的编程控制(即它只与css偶然相关,因为css是在控件上设置皮肤的一种方法)。
在OpenJFX wiki中Customizing Skins is documented(在某种程度上)。
皮肤定制依赖于一个名为SkinBase的新JavaFX 8类,它构成了javafx.scene.control公共API的一部分。
不建议在低于Java 8的版本中自定义外观,因为这样您将使用旧的,未记录且不受支持的私有API,这些API不适用于Java 8及更高版本。在Java 8中自定义皮肤很好,因为它依赖于公共API。
我非常确定你的问题,这不是你想要的,但它是你的问题的答案(至少我理解)。