BackgroundImage размер равен 0 в StackPane, он не должен быть - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь создать матрицу (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.

Может быть закрыт. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...