我需要通过CSS应用多种效果(主要是在内阴影和阴影效果)。 但我无法链这些影响。
是否有CSS等效setInput设置() javafx.scene.effect.Effect的? 到目前为止,我只发现了这个链接。 这表明一些关于修复,但没有有关如何使用链接的详细信息。
编辑 :如果问题不明确进一步解释:
申请通过CSS效果, -fx-effect
时使用。 我需要应用多种效果相同的节点。 如何“链”,这些在CSS中的效果? 这可以通过代码使用前面提到的setInput设置()很容易做到。 TIA
Answer 1:
这是目前无法在Java 7中,也没有在Java中8链条效应或通过CSS应用多种效果。 看到甲骨文CSS文档 。
它也是在提到CSS代码VS文章。
Answer 2:
作为@Lorand提到,这是不可能通过CSS连锁反应。
他还给出了链接通过代码影响的一个众所周知的例子的链接。
我会提供FXML的解决方案,使用相同的例子来比较结果。
通过(更新)的代码:
@Override
public void start(Stage primaryStage) throws IOException {
Circle circle = new Circle(64,64,48);
Paint fill = new LinearGradient(0, 0, 0, 1,
true, CycleMethod.NO_CYCLE,
new Stop(0.0, Color.rgb(207, 0, 58)),
new Stop(1.0, Color.rgb(129, 0, 33)));
circle.setFill(fill);
circle.setStroke(null);
InnerShadow innerShadow = new InnerShadow(BlurType.GAUSSIAN,Color.color(0, 0, 0, 0.65),5,0,0,-5);
InnerShadow innerGlow = new InnerShadow(BlurType.GAUSSIAN,Color.color(1, 1, 1, 0.65),5,0,0,5);
innerGlow.setInput(innerShadow);
DropShadow dropShadow = new DropShadow(BlurType.GAUSSIAN, Color.color(0, 0, 0, 0.65), 5, 0, 0, 0);
dropShadow.setInput(innerGlow);
circle.setEffect(dropShadow);
VBox vBox = new VBox(circle);
vBox.setAlignment(Pos.CENTER);
Scene scene = new Scene(vBox,200,200,Color.web("#a9a9a9"));
primaryStage.setTitle("Chain effect by code");
primaryStage.setScene(scene);
primaryStage.show();
}
需要注意的是影响在应用相反的顺序确定。 为了清楚起见,我们也可以这样写:
circle.setEffect(dropShadow);
dropShadow
.setInput(innerGlow);
innerGlow
.setInput(innerShadow);
现在让我们使用场景生成器2.0创建FXML文件circle.fxml
。
一旦我们拥有了一圈,我们设置了DropShadow
的影响,然后我们编辑效果,并选择Replace Effect Input
从菜单按钮选项:
然后,选择InnerShadow
,定义效果,再次选择Replace Effect Input
,再次选择InnerShadow
:
定义效果,保存退出。 这将是源代码:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.effect.*?>
<?import javafx.scene.paint.*?>
<?import java.lang.*?>
<?import javafx.scene.shape.*?>
<VBox alignment="CENTER" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Circle radius="48.0" stroke="TRANSPARENT" strokeType="INSIDE" strokeWidth="1.0">
<fill>
<LinearGradient endX="0.0" endY="1" proportional="true" startX="0" startY="0">
<stops>
<Stop color="#cf003a" offset="0.0" />
<Stop color="#810021" offset="1.0" />
</stops>
</LinearGradient>
</fill>
<effect>
<DropShadow blurType="GAUSSIAN" color="#000000a6" radius="5.0">
<input>
<InnerShadow blurType="GAUSSIAN" color="#ffffffa6" offsetY="5.0" radius="5.0">
<input>
<InnerShadow blurType="GAUSSIAN" color="#000000a6" offsetY="-5.0" radius="5.0" />
</input>
</InnerShadow>
</input>
</DropShadow>
</effect>
</Circle>
</children>
</VBox>
最后,在加载我们的场景本文件:
@Override
public void start(Stage primaryStage) throws IOException {
VBox vBox = FXMLLoader.load(getClass().getResource("circle.fxml"));
Scene scene = new Scene(vBox,200,200,Color.web("#a9a9a9"));
primaryStage.setTitle("Chain effect by FXML");
primaryStage.setScene(scene);
primaryStage.show();
}
这将是结果:
文章来源: Effect chaining - CSS Equivalent for effect.setInput in javafx