如何正确使用布局的方法setEffect

时间:2016-04-25 14:37:23

标签: java javafx javafx-8

我的简单应用程序有两个布局窗格。首先是VBox窗格。它是根节点。第二个窗格是子窗格(窗格布局)。我想仅对根窗格使用DropShadow效果。我根据文档做到了。不幸的是,我对两个窗格都有投影效果。对于root和孩子。它是一个错误还是有办法只为一个窗格设置它?我试图使用pane.setEffect(null)但没有成功。当我向窗格添加一些子节点时,新节点也有阴影。

我使用JavaFX8(Windows 7 - 64)。

谢谢。

public void start( Stage stage )
{
        VBox vbox = new VBox();
        vbox.setPadding( new Insets( 30 ) );

        BorderStrokeStyle style = new BorderStrokeStyle( StrokeType.INSIDE, StrokeLineJoin.MITER, StrokeLineCap.BUTT, 10, 0, null );
        BorderStroke stroke = new BorderStroke( Color.BLUE, style, CornerRadii.EMPTY, new BorderWidths( 1 ), null );
        vbox.setBorder( new Border( stroke ) );

        DropShadow dropShadow = new DropShadow();
        dropShadow.setOffsetX( 10 );
        dropShadow.setOffsetY( 10 );
        vbox.setEffect( dropShadow );

        Pane pane = new Pane();
        pane.setBorder( new Border( stroke ) );

        pane.setPrefWidth( 500 );
        pane.setPrefHeight( 500 );

        vbox.getChildren().add( pane );

        stage.setScene( new Scene( vbox ) );
        stage.show();
}

此外:

试图使用css: vbox.setStyle(“ - fx-effect:dropshadow(gaussian,grey,10,0.6,10,10);”); 相同的狗屎 - 效果适用于两个窗格。 ((

1 个答案:

答案 0 :(得分:0)

我试图回答我自己的问题。

我做了一些简单的调查,看起来它不是一个bug。它试图为窗格提供真实的行为。

如果窗格没有不透明的背景 - 所有窗格的子窗口也应该有阴影(如果所有者窗格有它)。另一方面 - 如果窗格具有纯色背景,则孩子不能有阴影。直到你特意把阴影。

所以......你只需要为窗格提供一个不透明的背景,以避免窗格儿童形状和窗格的阴影。

当然,在docemtntation中注意它会很好。