使用以下CSS來得到一個陰影:
-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.8), 10, 0, 0, 0);
有關詳細信息,請參閱JavaFX CSS Reference guide。
要獲得除陰影外的邊框,請將包含圖像的ImageView放入StackPane中。除了StackPane上的背景和填充之外,還將上面的效果CSS應用於StackPane。
例如下面的CSS應用到包含您的ImageView的StackPane將提供紅色邊框的圖像:
-fx-padding: 10;
-fx-background-color: firebrick;
如果你想定義你的邊框,邊緣彎曲的背景,然後使用:
-fx-background-radius: 5;
,讓你像下面您的影像被封閉在一個陰影邊界的圖像:
如果你想實際上將圖像本身四捨五入,這有點棘手。您需要將一些代碼應用於:
- 將圖像剪切爲圓角矩形。
- 快照剪輯的圖像。
- 將快照圖像存儲回ImageView中。
- 從ImageView中刪除剪輯。
- 將投影效果應用於ImageView。
然後你就可以得到類似如下:
一些代碼爲 「BatmanLost.java」:
import javafx.application.Application;
import javafx.fxml.*;
import javafx.scene.*;
import javafx.scene.effect.DropShadow;
import javafx.scene.image.*;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import java.io.IOException;
public class BatmanLost extends Application {
class WingClipper {
@FXML
private ImageView imageView;
@FXML
public void initialize() {
// set a clip to apply rounded border to the original image.
Rectangle clip = new Rectangle(
imageView.getFitWidth(), imageView.getFitHeight()
);
clip.setArcWidth(20);
clip.setArcHeight(20);
imageView.setClip(clip);
// snapshot the rounded image.
SnapshotParameters parameters = new SnapshotParameters();
parameters.setFill(Color.TRANSPARENT);
WritableImage image = imageView.snapshot(parameters, null);
// remove the rounding clip so that our effect can show through.
imageView.setClip(null);
// apply a shadow effect.
imageView.setEffect(new DropShadow(20, Color.BLACK));
// store the rounded image in the imageView.
imageView.setImage(image);
}
}
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws IOException {
FXMLLoader loader = new FXMLLoader(
getClass().getResource(
"batmanlostinthemix.fxml"
)
);
loader.setController(new WingClipper());
Pane batman = loader.load();
stage.setTitle("Where's Batman?");
stage.setScene(new Scene(batman));
stage.show();
}
}
隨着一些FXML「batmanlostinthemix。FXML「:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="313.0" prefWidth="477.0" style="-fx-background-color: azure;" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2">
<children>
<ImageView fx:id="imageView" layoutX="29.0" layoutY="44.0" fitHeight="224.0" fitWidth="400.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="http://collider.com/wp-content/uploads/lego-batman-movie-dc-super-heroes-unite-1.jpg" />
</image>
</ImageView>
</children>
</AnchorPane>
對於盒子陰影,我找到了以下解決方案:-fx-effect:dropshadow(三通盒,rgba(0,0,0,1) ,5,0.0,0,1); –