正如@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);
现在让我们使用 Scene Builder 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();
}
这将是结果: