JavaFX中的ImageView没有保持适当的大小

时间:2015-01-16 05:49:34

标签: java javafx

我使用这种格式将图像作为背景图片放置。

final VBox mainroot = new VBox();
mainroot.getChildren().addAll(backbutton,heroship);

final StackPane mainstackPane = new StackPane();
mainstackPane.getChildren().addAll(iv2,mainroot); 

final HBox hbox = new HBox(mainstackPane);

iv2是我的图像iteself,像这样创建

final Image imagegame = new Image(bcolor,width,height, false, false);
ImageView iv2 = new ImageView();
iv2.setImage(imagegame);
iv2.setPreserveRatio(true);
iv2.setFitWidth(width);
iv2.setFitHeight(height);

同样,我正在使用数组和for循环添加一定数量的Labels,

Label[] alienship = new Label[10];
for (int i=0;i<alienship.length;i++)
{
    mainroot.getChildren().add(alienship[i]);
}

我的问题是,每当我更改标签大小的数组时,从10到20,图像本身向下移动,我将不得不将其翻译为适合。

我尝试过同时使用VBox和HBox但我无法看到我的结果有所不同。

我也试过使用.setFitWidth()和.setFitHeight(),但没有任何帮助。

使用Label [] alienship = new Label [10]; 结果:http://puu.sh/eAihN/c5c7f38ef0.jpg (在这种情况下,我会使用.setTranslate将其重新对齐。


使用Label [] alienship = new Label [20]; 结果:http://puu.sh/eAiqz/3b4280b63b.jpg

无论我将数组设置为什么尺寸,我该怎么做才能解决这个问题并确保它保持对齐状态?

感谢。

1 个答案:

答案 0 :(得分:0)

<强>问题

问题不在于ImageView,而在于您选择添加heroshipalienship的布局/容器。

VBox是一种布局,其高度取决于孩子的数量和每个孩子的身高。当alienship的数量增加时,VBox height会增加以容纳所有孩子。

<强>解决方案

您必须考虑可以添加任意数量子项的布局,而不会影响容器的宽度和高度。考虑StackPane

快速修复是将VBox作为StackPane的父级。将Image和space space添加到StackPane,然后将Button和StackPane添加到VBox。最后将VBox添加到您的HBox中。

final StackPane mainstackPane = new StackPane();
mainstackPane.getChildren().addAll(iv2, heroship); 

final VBox mainroot = new VBox();
mainroot.getChildren().addAll(backbutton, mainstackPane);

final HBox hbox = new HBox(mainroot);

将所有外国人添加到StackPane,而不是将其添加到VBox

Label[] alienship = new Label[10];
for (int i=0;i<alienship.length;i++)
{
    mainstackPane.getChildren().add(alienship[i]);
}