2015-01-16 3 views
0

Я использую этот формат для размещения изображения в качестве фонового изображения.ImageView в 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); 

Как хорошо, я добавляю определенное количество этикеток с использованием массива и для цикла,

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

Мои проблема заключается в том, что каждый раз, когда я меняю массив размеров меток, скажем от 10 до 20, само изображение сдвигается вниз, и мне нужно будет перевести его обратно в нужное место.

Я пробовал использовать как VBox, так и HBox, но я не вижу различий в моем результате.

Я также попытался использовать .setFitWidth() и .setFitHeight(), но ничего не помогло.

С этикеткой [] alienship = new Label [10]; Результат: http://puu.sh/eAihN/c5c7f38ef0.jpg (В данном случае я бы использовал .setTranslate для Allign его обратно


с ярлыком [] alienship = новая этикетка [20]; Результат:. http://puu.sh/eAiqz/3b4280b63b.jpg

Что может Я сделать, чтобы решить эту проблему и обеспечить его не остается выровненным независимо от того, какого размера я установил массив?

Спасибо.

ответ

0

Проблема

Проблема не с ImageView, а с макетом/контейнером, который вы выбрали для добавления heroship и alienship.

VBox - это макет, высота которого зависит от количества детей и высоты каждого ребенка. Когда число alienship увеличится, VBox height увеличится для размещения всех детей.

Решение

Вы должны рассмотреть макет, который может добавить любое количество детей, без какого-либо влияния на ширину и высоту контейнера. Рассмотрим StackPane

Быстрое исправление заключается в том, чтобы сделать VBox родительским элементом StackPane. Добавьте изображение и космос в 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); 

Добавить все alienships к StackPane вместо добавления их в VBox

Label[] alienship = new Label[10]; 
for (int i=0;i<alienship.length;i++) 
{ 
    mainstackPane.getChildren().add(alienship[i]); 
} 
Смежные вопросы