StackPane中BackgroundImage的大小为0,不应为0

时间:2019-04-18 08:29:45

标签: image javafx background

我正在尝试为场景创建一个矩阵(GridPane)作为rootPane,其中填充了StackPanes,并填充了BackgroundImages。这些图像不会显示(甚至显示为Node(= 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);
    }

我创建了while的原因,因为它在我测试时比较简单,也许我会对其进行更改以进行进一步的测试。

StackPane []或多或少很有趣。

getDecisionForBackground()中的if-else结构曾经是一个开关案例;如果我的问题解决了,我想我会改变它。

请注意,应从.txt文件中提取应插入图片的信息,该文件应以数字填充。

我不知道问题出在哪里,以及应该(或可以)做什么才能显示图片(除非我必须使用CSS,但我不相信)。

如果有人能告诉我缩放比例为零的原因以及更改它的方法,那就太好了。

编辑:感谢fabian的乐于助人(评论部分),我已经找到了问题;我只是忘了为.png添加FileInputStream。

可以关闭。谢谢。

0 个答案:

没有答案