如何在 JavaFX 中的矩形或圆形内添加图像?

Posted

技术标签:

【中文标题】如何在 JavaFX 中的矩形或圆形内添加图像?【英文标题】:How do I add an image inside a rectangle or a circle in JavaFX? 【发布时间】:2014-05-15 22:37:16 【问题描述】:

假设我们有一个叫做 r 的矩形

Rectangle r = new Rectangle(40, 20);

还有一张叫做image的图片

Image image = new Image("...src for image");

如何将图像放入矩形内?另外,如果矩形也移动,如何使图像移动?我如何为一个圆圈做同样的事情?非常感谢代码示例。

附: Jewelsea,我在等你,哈哈!

【问题讨论】:

Border-Radius and Shadow on ImageView 的可能重复项 【参考方案1】:

如果你想用图像填充矩形,你可以按照这个:- 在你的 fxml 文件中添加一个 Circle

<Rectangle fx:id="imgMenuUser" />

在你的控制器中

@FXML
private Rectangle rectangle;
Image img = new Image("/image/rifat.jpg");
rectangle.setFill(new ImagePattern(img));

【讨论】:

【参考方案2】:

如何将图像放入矩形内?

将形状和图像放入 StackPane。

另外,如果矩形也移动,我怎样才能让图像移动?

只需移动 StackPane。

import javafx.application.Application;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.geometry.Point2D;
import javafx.stage.Stage;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;


public class Main extends Application 
    @Override
    public void start(Stage primaryStage) 
        try 
            Pane root = new Pane();

            StackPane imageContainer = new StackPane();
            ImageView image = new ImageView(...);
            imageContainer.getChildren().addAll(new Rectangle(64, 48, Color.CORNFLOWERBLUE), image);
            enableDragging(imageContainer);

            root.getChildren().add(imageContainer);

            Scene scene = new Scene(root,800,600);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
         catch(Exception e) 
            e.printStackTrace();
        
    

    private void enableDragging(Node node) 
        final ObjectProperty<Point2D> mouseAnchor = new SimpleObjectProperty<>();
        node.setOnMousePressed( event -> mouseAnchor.set(new Point2D(event.getSceneX(), event.getSceneY())));
        node.setOnMouseDragged( event -> 
            double deltaX = event.getSceneX() - mouseAnchor.get().getX();
            double deltaY = event.getSceneY() - mouseAnchor.get().getY();
            node.relocate(node.getLayoutX()+deltaX, node.getLayoutY()+deltaY);
            mouseAnchor.set(new Point2D(event.getSceneX(), event.getSceneY()));;
        );
    

    public static void main(String[] args) 
        launch(args);
    

【讨论】:

以上是关于如何在 JavaFX 中的矩形或圆形内添加图像?的主要内容,如果未能解决你的问题,请参考以下文章

圆圈内的可移动图像

如何使用 JavaFX 实现放大/缩小?

在JavaFX中仅显示填充了图像的百分比

在 d3 javascript 中的圆形对象内添加图像?

如何在圆形 imageView android 上添加一个阴影和边界

如何在Android中剪切矩形内的圆形路径