我已经设法通过使用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();
}
}