Я пытаюсь создать матрицу (GridPane) в качестве rootPane для сцены, заполненную стеками, заполненными фоновыми изображениями. Эти изображения не отображаются (даже в виде узла (= ImageView)).
Я пробовал некоторые обходные пути, но эти картинки не отображаются. Я определил, что проблема, как кажется, состоит в том, что их высота и ширина равны 0, а то и вовсе.
Как я уже упоминал, я пытался передать эти .png как Node в StackPane, но их размер остался 0 в каждом направлении.
Вот мой код:
@Override
public void start(Stage primaryStage) throws Exception
{
StackPane spForMatrix[] = new StackPane[100];
GridPane matrix = new GridPane();
matrix.setGridLinesVisible(true);
Scanner sc = new Scanner(new BufferedReader(new FileReader("src/matrixReadIn.txt")));
sc.useDelimiter(",");
String datahold = null;
int i = 0, j = 0, k = 0;
try {
while ((datahold = sc.next()) != null)
{
if (j == 10)
{
j = 0;
i++;
}
Image im = getDecisionForBackground(datahold);
spForMatrix[k] = new StackPane();
spForMatrix[k].setBackground(new Background(new BackgroundImage(im, BackgroundRepeat.NO_REPEAT,
BackgroundRepeat.NO_REPEAT, BackgroundPosition.CENTER, new BackgroundSize(BackgroundSize.AUTO,
BackgroundSize.AUTO, false, false, true, true))));
spForMatrix[k].getChildren().add(new Label(datahold));
matrix.add(spForMatrix[k], j, i);
j++;
k++;
}
}
catch(NoSuchElementException nsee)
{
System.out.println("closed with nsee error");
sc.close();
}
sc.close();
Scene primaryScene = new Scene(matrix);
primaryStage.setScene(primaryScene);
primaryStage.show();
}
public Image getDecisionForBackground(String datahold) throws URISyntaxException
{
int metaBinder = Integer.parseInt(datahold);
if (metaBinder == 0)
return new Image("file:brown.png", 64, 64, false, false);
else if (metaBinder == 1)
return new Image("file:blue.png", 64, 64, false, false);
else
return new Image("file:green.png", 64, 64, false, false);
}
Я создал время, потому что во время тестирования это было проще, возможно, я изменю его для дальнейших испытаний.
StackPane [] более или менее для развлечения.
Структура if-else в getDecisionForBackground()
когда-то была переключателем; Я думаю, что я изменю это, если моя проблема решена.
Обратите внимание, что информация, куда следует вставить изображение, будет извлечена из .txt, заполненного числами.
У меня нет идей, откуда возникла проблема и что я должен (или могу) сделать, чтобы картинки отображались (если только мне не приходится работать с CSS, но я не верю в это).
Было бы неплохо, если бы кто-нибудь сказал мне, почему масштабирование равно нулю, и что мне нужно сделать, чтобы изменить его.
Редактировать: Благодаря веселой помощи Фабиана (раздел комментариев) я нашел проблему; Я просто забыл добавить FileInputStream для .png.
Может быть закрыт. Спасибо.