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

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

Rectangle r = new Rectangle(40, 20);

还有一张叫做image的图片

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

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

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

【问题讨论】:

标签: java image javafx geometry


【解决方案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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2011-06-22
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多