JAVA JPanel 不显示图像

JAVA JPanel not displaying image

我目前正在尝试从 url 读取图像(google 街景)并将其添加到 JPanel。首先,我使用 url "https://maps.googleapis.com/maps/api/streetview?size=600x300&location=46.414382,10.013988" 并尝试从中读取图像,然后将此图像添加到我将显示的 jpanel 中。我没有收到任何编译或运行时错误,但是 JPanel 永远不会弹出,所以我无法判断我的图像是否在上面。有什么想法吗?

编辑:澄清一下,我想弹出一个新的 window 包含从 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);

I want to pop up a new window which will display this image in the URL, not add it to an existing frame

我问你为什么希望它显示为 window,你说,

I would expect it to because I have instantiated it and call setVisible on it.

了解 JPanel 是一个容器组件,它包含其他组件但没有显示完整 GUI 的机制。为此,您需要将其放入某种类型的顶层 window 中,例如 JFrame、JDialog、JApplet 或 JOptionPane,或者放入显示在顶层 window.[= 中的另一个容器中。 14=]

然后创建一个对话框window并在其中显示图像。最简单的是 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 本身不会弹出和显示任何内容。您需要将其添加到父级 window,例如 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);

这应该让你开始。