JavaFX 2.2:通过css修改皮肤样式

时间:2013-07-22 15:45:37

标签: css background javafx padding skinning

我正在通过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直接访问此组件?

1 个答案:

答案 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。

我非常确定你的问题,这不是你想要的,但它是你的问题的答案(至少我理解)。