如何在JavaFX中通过CSS获得文本上的浮雕(凸起字母)效果?

时间:2014-07-22 15:45:19

标签: java css text javafx emboss

我几天一直在抨击我的大脑,但是我无法在Google上找到问题的直接答案。有很多CSS的东西,但我真的不知道从一般的CSS域到JavaFX CSS域的交叉(如果有的话,我真的不知道有什么事情)。

我有一个功能上是按钮的标签。它有3个由CSS反映的状态:

1:空闲,没什么特别的。 2:悬停这是我希望文本显示的位置"引发" 3:按下:我能够弄清楚这一点。

对于悬停我有以下CSS:

.label:hovered{
    //What goes in here to make the text appear embossed (raised) when the cursor 
    //is hovering over it?
}

我已经尝试了-fx-effect : innershadow(...),但它并没有真正提供理想的预期效果。

编辑::为了清楚起见this是我的目标(参见#3)。我尝试了CSS,但它没有用。

现在控制的外观是正确的:

Idle Hovering enter image description here

1 个答案:

答案 0 :(得分:0)

您可以使用Lighting效果,此处是指向Oracle tutorial on lighting的链接。

lighting

效果无法通过Java 8中的CSS应用。您可以在代码中或通过xml应用它。

您可以在节点的hover property上添加一个侦听器,通过将节点效果设置为null来关闭灯光,并通过将节点效果设置为您的灯光来打开它。

JavaFX javadoc on Lighting中有示例代码,我刚刚在这里转载:

Light.Distant light = new Light.Distant();
light.setAzimuth(-135.0);

Lighting lighting = new Lighting();
lighting.setLight(light);
lighting.setSurfaceScale(5.0);

Text text = new Text();
text.setText("JavaFX!");
text.setFill(Color.STEELBLUE);
text.setFont(Font.font(null, FontWeight.BOLD, 60));
text.setX(10.0);
text.setY(10.0);
text.setTextOrigin(VPos.TOP);
text.setEffect(lighting);

投影也会起作用,并且可能还有其他方法可以实现您想要的效果,但结果略有不同。