JAVA JPanel不显示图像

JAVA JPanel不显示图像,java,jpanel,bufferedimage,imageicon,Java,Jpanel,Bufferedimage,Imageicon,我目前正在玩从url读取图像(谷歌街景)并将其添加到JPanel的游戏。首先,我获取url“”并尝试从中读取图像,然后将此图像添加到我将显示的jpanel中。我没有收到任何编译或运行时错误,但是JPanel从未弹出,因此我无法判断图像是否在其中。有什么想法吗 编辑:为了澄清,我想弹出一个新窗口,其中包含从URL读取的图像,而不是将图像添加到现有面板 URL url = new URL("https://maps.googleapis.com/maps/api/streetview?size=60

我目前正在玩从url读取图像(谷歌街景)并将其添加到JPanel的游戏。首先,我获取url“”并尝试从中读取图像,然后将此图像添加到我将显示的jpanel中。我没有收到任何编译或运行时错误,但是JPanel从未弹出,因此我无法判断图像是否在其中。有什么想法吗

编辑:为了澄清,我想弹出一个新窗口,其中包含从URL读取的图像,而不是将图像添加到现有面板

URL url = new URL("https://maps.googleapis.com/maps/api/streetview?size=600x300&location=46.414382,10.013988");
BufferedImage streetView  = ImageIO.read(url);
JLabel label = new JLabel(new ImageIcon(streetView));
JPanel panel = new JPanel();
panel.add(label);
panel.setLocation(0,0);
panel.setVisible(true);
我想弹出一个新窗口,在URL中显示此图像,而不是将其添加到现有框架中

我问你为什么希望它显示为一个窗口,你说

我希望它是这样的,因为我已经实例化了它并调用了setVisible

了解JPanel是一个容器组件,它包含其他组件,但没有显示完整GUI的机制。要做到这一点,您需要将它放在某种类型的顶级窗口中,例如JFrame、JDialog、JApplet或JOptionPane,或者放在顶级窗口中显示的另一个容器中

然后创建一个对话框窗口并在其中显示图像。最简单的是JOptionPane:

URL url = new URL("https://maps.googleapis.com/maps/api/streetview?size=600x300&location=46.414382,10.013988");
BufferedImage streetView  = ImageIO.read(url);
JLabel label = new JLabel(new ImageIcon(streetView));
// JPanel panel = new JPanel();
// panel.add(label);

// code not needed:
// panel.setLocation(0,0);
// panel.setVisible(true);

// mainGuiComponent is a reference to a component on the main GUI
// or null if there is no main GUI.
JOptionPane.showMessageDialog(mainGuiComponent, label);
请注意,只需将ImageIcon传递到JDialog中,这也就足够了

JOptionPane.showMessageDialog(mainGuiComponent, myImageIcon);
我想弹出一个新窗口,在URL中显示此图像,而不是将其添加到现有框架中

我问你为什么希望它显示为一个窗口,你说

我希望它是这样的,因为我已经实例化了它并调用了setVisible

了解JPanel是一个容器组件,它包含其他组件,但没有显示完整GUI的机制。要做到这一点,您需要将它放在某种类型的顶级窗口中,例如JFrame、JDialog、JApplet或JOptionPane,或者放在顶级窗口中显示的另一个容器中

然后创建一个对话框窗口并在其中显示图像。最简单的是JOptionPane:

URL url = new URL("https://maps.googleapis.com/maps/api/streetview?size=600x300&location=46.414382,10.013988");
BufferedImage streetView  = ImageIO.read(url);
JLabel label = new JLabel(new ImageIcon(streetView));
// JPanel panel = new JPanel();
// panel.add(label);

// code not needed:
// panel.setLocation(0,0);
// panel.setVisible(true);

// mainGuiComponent is a reference to a component on the main GUI
// or null if there is no main GUI.
JOptionPane.showMessageDialog(mainGuiComponent, label);
请注意,只需将ImageIcon传递到JDialog中,这也就足够了

JOptionPane.showMessageDialog(mainGuiComponent, myImageIcon);

JPanel本身不会弹出并显示任何内容。您需要将其添加到父窗口,例如JFrame或JDialog

URL url = new URL("https://maps.googleapis.com/maps/api/streetview?size=600x300&location=46.414382,10.013988");
BufferedImage streetView  = ImageIO.read(url);
JLabel label = new JLabel(new ImageIcon(streetView));
JPanel panel = new JPanel();
panel.add(label);

JFrame frame = new JFrame();
frame.add(panel);
frame.pack();
frame.setVisible(true);

这应该可以让您开始了。

JPanel本身不会弹出并显示任何内容。您需要将其添加到父窗口,例如JFrame或JDialog

URL url = new URL("https://maps.googleapis.com/maps/api/streetview?size=600x300&location=46.414382,10.013988");
BufferedImage streetView  = ImageIO.read(url);
JLabel label = new JLabel(new ImageIcon(streetView));
JPanel panel = new JPanel();
panel.add(label);

JFrame frame = new JFrame();
frame.add(panel);
frame.pack();
frame.setVisible(true);

这应该可以让你开始了。

@cbender我从缓冲图像创建的图像图标中创建一个标签,然后将标签添加到面板中。。。有不同的方法吗?我有一个愚蠢的问题:你是否将这个面板添加到任何你使其可见的框架中?我使用@Pshemo,因为问题可能出在你的JPanel面板变量上。我建议您简化并去掉panel JPanel变量,因为它除了混淆之外没有其他用途。而是将映像添加到已经添加到GUI的JLabel中。不,不要像有人在回答中建议的那样显示另一个JFrame。也许我没有像我应该的那样清楚。我想弹出一个新窗口,在URL中显示此图像,而不是将其添加到现有框架中。您也提到过,
“但是JPanel永远不会弹出…”
——为什么您希望它会弹出?编辑,您声明:
“我想弹出一个新窗口,在URL中显示此图像,而不是将其添加到现有框架中”
--然后在JOptionPane中显示它。@cbender我用从缓冲图像创建的图像图标制作标签,然后将标签添加到面板中。。。有不同的方法吗?我有一个愚蠢的问题:你是否将这个面板添加到任何你使其可见的框架中?我使用@Pshemo,因为问题可能出在你的JPanel面板变量上。我建议您简化并去掉panel JPanel变量,因为它除了混淆之外没有其他用途。而是将映像添加到已经添加到GUI的JLabel中。不,不要像有人在回答中建议的那样显示另一个JFrame。也许我没有像我应该的那样清楚。我想弹出一个新窗口,在URL中显示此图像,而不是将其添加到现有框架中。您也提到过,
“但是JPanel永远不会弹出…”
——为什么您希望它会弹出?编辑,您声明:
“我想弹出一个新窗口,在URL中显示此图像,而不是将其添加到现有框架中”
——然后在JOptionPane中显示它。非常感谢。信息量也很大。作为后续问题,传入null作为父组件如何/为什么仍然允许我的JOptionPane显示?@peggy:JOptionPane实际上是一个伪装的JDialog或“sub”窗口,Swing使用第一个参数为对话框指定父窗口,对话框将锁定并阻止用户交互的窗口,直到关闭JDialog。如果传入
null
,Swing将创建(我相信)一个未显示的JFrame作为对话框的父窗口。请注意,我不是100%肯定后者,需要再次检查其准确性。我知道null可以工作,但如果您从另一个Swing窗口显示JopOptions窗格,则不应使用null。非常感谢。信息量也很大。作为后续问题,传入null作为父组件如何/为什么仍然允许我的JOptionPane显示?@peggy:JOptionPane实际上是一个伪装的JDialog或“sub”窗口,Swing使用第一个参数为对话框指定父窗口,对话框将锁定并阻止用户交互的窗口,直到关闭JDialog。如果传入
null
,Swing将创建(我相信)一个未显示的JFrame作为对话框的父窗口。请注意,我不是100%肯定后者,需要再次检查其准确性。我知道null可以工作,但如果您从另一个Swing窗口显示JopOptions窗格,则不应使用null。