如何在可调整大小的imageview上定位文本?

时间:2015-04-11 01:00:55

标签: text javafx imageview scale

它有一个堆叠窗格,里面有几个孩子:

public class SlideFromText {

    private StackPane sp = new StackPane();
    private ImageView iv = new ImageView();
    private int lines_count = 0;
    private Group text_group = new Group();

    public SlideFromText(Image img, String t) {

        iv.setImage(img);
        iv.setPreserveRatio(true);
        iv.fitWidthProperty().bind(sp.widthProperty());
        iv.fitHeightProperty().bind(sp.heightProperty());

        sp.setStyle("-fx-border-color : red; -fx-border-width: 1; -fx-border-style: solid;");
        sp.setAlignment(Pos.CENTER);
        sp.setMinSize(0, 0);
        sp.getChildren().add(iv);
        String lines[] = t.split("\\r?\\n");
        double height = 0;
        for (String line : lines) {
            Text text = new Text(line);
            text.setFill(Color.BLACK);
            text.setY(height);
            text_group.getChildren().add(text);
            lines_count++;
            height += text.getBoundsInLocal().getHeight();
            System.out.println("Height: " + height);
        }

        sp.getChildren().add(text_group);
        iv.boundsInParentProperty().addListener(new ChangeListener<Bounds>() {

            @Override
            public void changed(ObservableValue<? extends Bounds> observable, Bounds oldValue, Bounds newValue) {
                Node node = sp.getChildren().get(1);
                if (node.getClass() != Group.class) {
                    return;
                }
                Group group_node = (Group) node;
                double scale_x = iv.getBoundsInParent().getWidth() / group_node.getBoundsInParent().getWidth();
                double scale_y = iv.getBoundsInParent().getHeight() / group_node.getBoundsInParent().getHeight();
                double scale = Math.min(scale_x, scale_y);
                group_node.setScaleX(group_node.getScaleX() * scale);
                group_node.setScaleY(group_node.getScaleY() * scale);
                System.out.println("IVB: " + iv.getBoundsInParent());
                System.out.println("GVB: " + group_node.getBoundsInParent());       
            }

        });
    }

    public Pane getPane() {
        return sp;
    }

}

我需要在组内部使用多行文本。我想调整窗口大小并保持图像宽高比和文本比例以及图像内的位置。

在我的示例中,我无法在图像顶部设置文本。

也许它有更简单的方法。

0 个答案:

没有答案