Java FX,来自Label的怪异行为

时间:2017-02-07 09:51:39

标签: javafx

我已经设法通过使用Text类而不是Label来解决以下问题,但是我仍然想了解这种行为。

我正在尝试创建一个包含图像的窗格以及该图像下方的一些文本。

我希望文本和图像都在窗格内居中。

我还希望文字粘在窗格底部,同时图像粘在窗格顶部。

以下是实现我想要的粗略代码。问题是,如果我运行代码,图像会偏离中心。标签也不会出现。

如果我用鼠标调整舞台大小,布局似乎自行解决。图像完全居中并显示文本。请解释一下,这是某种错误吗?

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

import static javafx.beans.binding.Bindings.subtract;

public class TestApp extends Application {

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        AnchorPane pane = new AnchorPane();
        BorderPane borderPane = new BorderPane();
        ImageView imageView = new ImageView();
        Label label = new Label("some text");


        AnchorPane.setBottomAnchor(borderPane, 0.0);
        AnchorPane.setTopAnchor(borderPane, 0.0);
        AnchorPane.setLeftAnchor(borderPane, 0.0);
        AnchorPane.setRightAnchor(borderPane, 0.0);

        imageView.setPreserveRatio(true);
        pane.getChildren().add(borderPane);
        borderPane.setTop(imageView);
        borderPane.setBottom(label);
        BorderPane.setAlignment(imageView, Pos.CENTER);
        BorderPane.setAlignment(label, Pos.CENTER);
        imageView.fitHeightProperty().bind(subtract(pane.heightProperty(), label.heightProperty()));

        imageView.setImage(new Image("file:C:\\pathToFile.jpg"));
        primaryStage.setScene(new Scene(pane, 200, 150));
        primaryStage.show();
    }
}

0 个答案:

没有答案