Java JPanel中未显示图像图标

Java JPanel中未显示图像图标,java,swing,intellij-idea,jpanel,imageicon,Java,Swing,Intellij Idea,Jpanel,Imageicon,代码非常简单。我从arraylist获取URL字符串。然后我试着在我的JPanel中画一个图像。如果我没有在代码中初始化布局,它将返回一个错误。如果我初始化了布局,没有错误,但是图标也不会显示。我错过什么了吗?谢谢大家! public class CharacterPage extends JFrame { private JPanel imagesPanel; private WikiDB wikiDB; public CharacterPage(WikiDB db)

代码非常简单。我从arraylist获取URL字符串。然后我试着在我的JPanel中画一个图像。如果我没有在代码中初始化布局,它将返回一个错误。如果我初始化了布局,没有错误,但是图标也不会显示。我错过什么了吗?谢谢大家!

public class CharacterPage extends JFrame {
   private JPanel imagesPanel;
   private WikiDB wikiDB;

     public CharacterPage(WikiDB db) throws IOException {
          super("Character Page");
          setContentPane(rootPanel);
          pack();
          setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
          setVisible(true);
          setSize(new Dimension(500,500));
          imagesPanel.setLayout(new BorderLayout());
          this.wikiDB = db;

               searchButton.addActionListener(new ActionListener() {
               @Override
               public void actionPerformed(ActionEvent e) {
               ArrayList<String> characterImages =    
                wikiDB.searchImages(characterID);
              //array contains this string: http://cosplayidol.otakuhouse.com/wp-content/uploads/2012/06/s-1-1.jpg

                for (int x = 0; x < characterImages.size(); x++){
                    String imageURL = characterImages.get(x);
                    Graphics g = getGraphics();


                   try {
                       URL url = new URL(imageURL);

                       //icon.paintIcon(imagesPanel,g,300,100);

                       JLabel wIcon = new JLabel(new ImageIcon(url));

                       imagesPanel.setVisible(true);
                       imagesPanel.add(wIcon);


                   } catch (MalformedURLException mue){
                       mue.printStackTrace();
                   }
            }
      });
}
编辑:我越来越接近了,现在我可以使用以下代码弹出一个包含图片的单独框架:

public class SimpleGUI extends JFrame {
private JPanel imagesPanel;
private JFrame mainFrame;

public SimpleGUI() throws IOException {
    super("GUI Page");
    setContentPane(imagesPanel);
    pack();
    setVisible(true);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    setSize(new Dimension(500, 500));

    mainFrame = new JFrame();

    imagesPanel.setLayout(new GridLayout());
    imagesPanel.setBounds(0,0,200,200);
    mainFrame.add(imagesPanel);
    mainFrame.setVisible(true);

我似乎无法在GUI表单中找到原始框架,因此我可以将imagesPanel添加到其中。我正在使用IntelliJ的GUI表单生成器

一个问题是,您试图在for循环中使用JPanel向BorderLayout添加多个组件,这样做会覆盖以前添加的所有组件,并添加新的内容。使用更合适的布局,例如GridLayout

另一个问题是,在哪里添加imagesPanel?在它上面调用
setVisible(true)
没有任何用处,但是将它添加到JFrame或最终由JFrame持有的JPanel中会有很多用处


此外,通常在来到这里之前,您需要进行一些认真的调试——读入图像是否有效?创建一个简单的GUI,用于读取图像(使用ImageIO.read(URL)进行此操作),创建一个ImageIcon并在JOptionPane中显示该图标。如果这样做有效,那么问题就出在别处了。如果它不能纠正URL地址。

您需要调试——读入图像是否有效?创建一个简单的GUI,用于读取图像(为此使用
ImageIO.read(URL)
),创建一个图像图标并在JOptionPane中显示该图标。如果这样做有效,那么问题就出在别处了。如果它不能纠正URL地址,我就可以创建一个简单的程序来纠正读取和显示图片的错误,但是我不能在原始的GUI表单/框架中显示它;我必须创建一个新的。我用新代码编辑了我的问题。有什么想法吗?非常感谢。Michelle,新代码只是显示你在新窗口中显示的图片。在你把问题提取出来之前,我无法说出你原来的程序有什么问题。最适合你尝试创建和发布一个。
public class SimpleGUI extends JFrame {
private JPanel imagesPanel;
private JFrame mainFrame;

public SimpleGUI() throws IOException {
    super("GUI Page");
    setContentPane(imagesPanel);
    pack();
    setVisible(true);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    setSize(new Dimension(500, 500));

    mainFrame = new JFrame();

    imagesPanel.setLayout(new GridLayout());
    imagesPanel.setBounds(0,0,200,200);
    mainFrame.add(imagesPanel);
    mainFrame.setVisible(true);