【问题标题】: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);
}
}