【发布时间】:2019-01-12 20:43:10
【问题描述】:
我正在尝试将图像动态添加到我的 JLabel,然后将 JLabel 添加到我的面板。我的代码没有抛出任何错误,但图像从未显示。
public JFrameGamePlay(String playername, String playerselected) {
initComponents();
playerimage = "/Users/owner/Downloads/__Pikachu.png";
ImageIcon pimage = new ImageIcon(playerimage);
JLabel lblPlayer = new JLabel(pimage);
pnlPlayer.add(lblPlayer);
pnlPlayer.validate();
pnlPlayer.repaint();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new JFrameGamePlay().setVisible(true);
}
});
}
编辑
所以通过进一步的谷歌搜索,我想出了这个语法
JLabel lblPlayer;
lblPlayer = new JLabel(new ImageIcon(getClass().getClassLoader().getResource("__Image1.png")));
pnlPlayer.add(lblPlayer);
pnlPlayer.validate();
pnlPlayer.repaint();
但是当我运行代码时,我得到了这个调试错误:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:217)
这是我希望数据显示方式的 GUI 布局 - 左侧有 1 个面板,右侧有 1 个面板 - 每个面板都有一个动态创建的标签并填充了图像。但是没有图像被填充。
编辑 2
我在我的 2 个面板周围添加了一个黑色边框,当加载 JForm 时,两个面板都没有显示。因此,似乎每个人都告诉我,在 NetBeans 中进行 GUI 设计是非常错误的。如何在我的代码后面动态添加两个面板,一左一右,大小分别为 143、246?
编辑 3
仍然没有芥末,我正在使用这种语法:
public JFrameGamePlay() {
initComponents();
JPanel leftpanel = new JPanel();
JPanel rightpanel = new JPanel();
JSplitPane pane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftpanel, rightpanel);
JLabel lblPlayer = new JLabel(new ImageIcon("/resources/__Image1.png"));
leftpanel.add(lblPlayer);
leftpanel.validate();
leftpanel.repaint();
}
【问题讨论】:
-
如果 Elliott 的回答不能解决您的问题,那么您将需要在您的问题中发布一个有效的minimal reproducible example,这是一个可编译和可运行的小型程序,为我们演示您的问题。请阅读链接。还可以使用在线提供的图片以便于测试。
-
致电
revalidate和repaintpnlPlayer -
或者更好的是——让那个 JLabel 已经在 pnlPlayer JPanel 中,并用一个包含空白图像的 ImageIcon 填充它,该图像是播放器图像的大小。
-
@MadProgrammer - 如果我添加 pnlPlayer.revalidate();和 pnlPlayer.repaint();仍然没有显示
-
@DoctorFord 那么我同意 Hovercraft 的观点,没有更多的上下文,我们无能为力了