一个JLabel的setIcon与一个JLabel数组的setIcon的区别



我正在尝试设计一个非常简单的图形界面,在那里我将添加一些图像,使用JLabel加载一个图标:

JFrame Table = new JFrame("Transporter Room");
Table.setSize(600, 600);
Table.setLocationRelativeTo(null);
Table.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Table.setLayout(new GridLayout(2, 2, 20, 20));

我的问题是加载JLabels数组的图标…如下所示:

JLabel playingCard = new JLabel(CardGUI.getIcon(myCard));
JLabel playingCard2 = new JLabel(CardGUI.getIcon(myCard2));
Table.add(playingCard);
Table.add(playingCard2);

请注意,CardGUI.getIcon(ob)只是一个静态方法,它可以正确地设置目录并加载具有给定card对象的Icon。

类似的东西也可以(尽管图标不在布局的中心)。为什么?):

JLabel playingCard = new JLabel();
JLabel playingCard2 = new JLabel();
playingCard.setIcon(CardGUI.getIcon(myCard));
playingCard2.setIcon(CardGUI.getIcon(myCard));
Table.add(playingCard);
Table.add(playingCard2);

使用JLabel数组也可以工作,只要我不使用setIcon(),但dup我的代码声明两次:

JLabel[] myLabel = new JLabel[2];
myLabel[0] = new JLabel(CardGUI.getIcon(myCard));
myLabel[1] = new JLabel(CardGUI.getIcon(myCard2));
Table.add(myLabel[0]);
Table.add(myLabel[1]);

然而,当我尝试这样做(我需要在每个规范中这样做)时,问题出现了:

JLabel[] myLabel = new JLabel[2];
myLabel[0].setIcon(CardGUI.getIcon(myCard));
myLabel[1].setIcon(CardGUI.getIcon(myCard2));
Table.add(myLabel[0]);
Table.add(myLabel[1]);

我得到一个Execption in thread "main" java.lang.NullPointerException。我也不知道为什么。我非常确定图像的目录是完美的(这是由另一个类处理的)。为什么只有在试图设置数组中的JLabel时才会出现这种情况?

这是我正在做的一个作业,我不喜欢使用任何可能更长的新代码。这应该是相当直接的,如果我可以通过这一点,我实际上使用一个for循环将图标加载到JLabels,然后使用另一个for循环将所有jlabel加载到桌面(这是我已经设置的另一个类)。任何帮助将非常感激!

当您创建JLabel[]时,您正在创建标签数组。不是数组中的标签。换句话说,在创建数组之后,数组元素仍然是null。这就是为什么倒数第二位代码可以工作,但最后一位代码不能——在最后一位代码中,您没有初始化数组中的元素,所以当您尝试对它们调用方法时,您会得到NullPointerException

最新更新