JAVAFX imageview允许用户添加标签

时间:2016-01-30 08:31:53

标签: text javafx tags imageview

我正在使用javafx创建一个图片库,我希望有一个功能允许用户在imageview上单击时向imageview添加一些标记(用于人脸),它应该抓住该位置鼠标指向并提示一个对话框,供用户输入面部名称并将其保存到数据库。

使用javafx可以实现吗?

如果是,我该怎么做?

感谢您的帮助。

我的应用程序的示例输出如下:

1 个答案:

答案 0 :(得分:0)

当然可以。我为单个Image创建了这个简单的示例,它为场景添加了一个按钮,该按钮添加了一个单击图像的圆圈。这应该证明这种方法。

@Override
public void start(Stage primaryStage) {
    ImageView imageView = new ImageView(...);
    imageView.setPreserveRatio(true);
    imageView.setFitHeight(200);
    StackPane pane = new StackPane();
    StackPane.setAlignment(imageView, Pos.TOP_LEFT);
    pane.getChildren().add(imageView);
    VBox box = new VBox(pane);

    pane.setOnMouseClicked(evt -> {
        if (evt.getButton() == MouseButton.PRIMARY) {
            // create node(s) that uses the click data
            Button button = new Button("Show point");
            button.setOnAction(e -> {
                // do something with the data on user interaction
                box.getChildren().remove(button);
                Circle circle = new Circle(evt.getX(), evt.getY(), 5, Color.RED);
                Pane circlePane = new Pane(circle);
                StackPane.setAlignment(circlePane, Pos.TOP_LEFT);
                pane.getChildren().add(circlePane);
            });
            box.getChildren().add(button);
        }
    });

    Scene scene = new Scene(box, 200, 300);

    primaryStage.setScene(scene);
    primaryStage.show();
}

对于您的申请,您将:

  • 创建一个不同的事件处理程序,根据您的需要创建和/或初始化UI,或显示一个对话框。您还可以直接将监听器注册到ImageView(除非您需要在其上添加一些元素,就像我一样)。
  • 使用evt.getX() * imageView.getImage().getWidth() / imageView.getLayoutBounds().getWidth()(绝对位置)或evt.getX() / imageView.getLayoutBounds().getWidth()(相对位置)计算图像坐标中的实际点击位置;相应地进行y位置。直接在点击处理程序中执行此计算,而不是在用户提交输入的信息时执行此计算,因为您可能希望用户能够调整图像的大小。此外,如果您使用viewport属性,则需要相应地修改计算。
  • 当用户提交他/她的编辑时,创建一个将信息发送到数据库的其他线程。当然,您还需要存储有关当前ImageView某处显示的图像的一些信息。