无法将 JLabel 添加到 JPanel

arl*_*iss 1 java swing jlabel imageicon

我有这个代码:

  ImageIcon ii = new ImageIcon("https://c1.staticflickr.com/9/8384/8682624224_4e44bf947d_h.jpg"); 
  subStream.add(new JLabel(ii));
Run Code Online (Sandbox Code Playgroud)

它的目的是将JLabel照片添加到JPanel名为subStream. 但它不起作用,没有错误或任何东西。为什么这样?

在此输入图像描述

图像应该出现在第三个 JPanel 中,位于按钮上方。

Mad*_*mer 5

需要注意的事项...

  • ImageIcon可能会默默地失败...我知道很烦人...这是因为...
  • ImageIcon使用后台线程加载图像,这是因为它的设计允许慢速源(拨号网络),这可能需要时间才能完全实现图像。

您应该使用ImageIO.read测试URL来消除下载图像时出现的潜在问题。IOException如果由于某种原因无法加载图像,这将抛出一个异常,并且将阻塞直到图像完全加载,因此请注意

有关更多详细信息,请参阅读取/加载图像

例如...

下载的图片

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.HeadlessException;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                try {
                    BufferedImage img = ImageIO.read(new URL("https://c1.staticflickr.com/9/8384/8682624224_4e44bf947d_h.jpg"));
                    JLabel label = new JLabel(new ImageIcon(img));

                    JFrame frame = new JFrame("Testing");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.add(label);
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                } catch (IOException exp) {
                    exp.printStackTrace();
                }
            }
        });
    }

}
Run Code Online (Sandbox Code Playgroud)

因此,这将图像和网络服务器视为潜在问题(至少在我的网络内),您的代码肯定还有其他问题。考虑提供一个可运行的示例来演示您的问题。这将减少混乱并获得更好的响应