在截图上你可以看到我使用了:-fx-border-radius: 10 10 10 10;-fx-background-radius: 10 10 10 10; 解决方案 使用以下 css 来获得阴影:-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.8), 10, 0, 0, 0);请参阅 JavaFX CSS 参考指南 详情.要获得除阴影之外的边框,请将包含图像的 ImageView 放置在 StackPane 中.并将上面的效果 css 应用到 StackPane,除了 StackPane 上的背景和填充.例如,应用于包含您的 ImageView 的 StackPane 的以下 css 将在您的图像周围提供红色边框:-fx-padding: 10;-fx-background-color: 耐火砖;如果您希望定义边界的背景在边缘弯曲,请使用:-fx-background-radius: 5;这会为您提供如下所示的图像,其中您的图像包含在阴影边框中:如果您真的想对图像本身进行四舍五入,那就有点棘手了.您需要将一些代码应用于:将图像剪裁成圆角矩形.拍摄剪下的图像.将快照图像存储回 ImageView.从 ImageView 中删除剪辑.将阴影效果应用到 ImageView.然后你可以得到如下内容:BatmanLost.java"的一些代码:import javafx.application.Application;导入 javafx.f<图片网址="http://collider.com/wp-content/uploads/lego-batman-movie-dc-super-heroes-unite-1.jpg"/></图像></ImageView></儿童></AnchorPane>I want to apply a border-radius and a shadow in JavaFX.In CSS3 it would be:box-shadow: rgba(0,0,0,0.8) 0 0 10px;border-radius: 3px;Now I want this in JavaFX, but even the border-radius is not working in the JavaFX Scene Builder. Here is a screenshot of my problem:On the screenshot you can see that I use:-fx-border-radius: 10 10 10 10;-fx-background-radius: 10 10 10 10; 解决方案 Use the following css to get a drop shadow:-fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.8), 10, 0, 0, 0);See the JavaFX CSS Reference guide for details.To get the border in addition to the drop shadow, place your ImageView containing your Image in a StackPane. And apply the effect css above to the StackPane, in addition to a background and padding on the StackPane.For example the css below applied to the StackPane containing your ImageView will provide a red border around your image:-fx-padding: 10;-fx-background-color: firebrick;If you want the background defining your border curved at the edges, then use:-fx-background-radius: 5;That gets you an image like below where your image is enclosed in a shadowed border:If you want to actually round the image itself, it's a bit trickier. You need to apply some code to:Clip the image to a rounded rectangle.Snapshot the clipped image.Store the snapshot image back in the ImageView.Remove the clip from the ImageView.Apply the drop shadow effect to the ImageView.Then you can get something like below:Some code for that "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(); }}With some 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> 这篇关于ImageView 上的边界半径和阴影的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-03 23:31