我正在尝试为场景创建一个矩阵(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。
可以关闭。谢谢。