简体   繁体   English

将带有图像的JLabel添加到JList以显示所有图像

[英]Add JLabel with image to JList to show all the images

Here is my code. 这是我的代码。 It does not show images in the frame and instead shows some text. 它不会在框架中显示图像,而是显示一些文本。 would anybody please suggest me that what change I should make in the code so that it allows me to show the images in a frame? 任何人都可以建议我,我应该在代码中做出什么改变,以便它允许我在一个框架中显示图像?

import java.awt.Component;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.DefaultListModel;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;

public class ListView {


public static void main(String[] args) throws IOException {
    JFrame frame=new JFrame();
    frame.setSize(500,500);
    JLabel lbl[] = new JLabel[10];
    DefaultListModel listModel;
     ImageIcon[] b = new   ImageIcon[10];
    //JList lsm=new JList();
    listModel = new DefaultListModel();
     File folder = new File("C:/Documents and Settings/All Users/Documents/My Pictures/Sample Pictures");
     File[] listOfFiles = folder.listFiles();
      JLabel[] lb=new JLabel[15];
    for (int i = 0; i < listOfFiles.length; i++) 
    {
          System.out.println("chek panth"+listOfFiles[i].getName().toString());
  //      b[i] = ImageIO.read(new File("C:/Documents and Settings/All Users/Documents/My Pictures/Sample Pictures/" + listOfFiles[i].getName().toString()));
         b[i] = new ImageIcon("C:/Documents and Settings/All Users/Documents/My Pictures/Sample Pictures/" + listOfFiles[i].getName().toString());
         lb[i]=new JLabel(b[i]);
         listModel.add(i, lb[i]);

    }
    JList lsm=new JList(listModel);

    Component add = frame.add(new JScrollPane(lsm));

    frame.setVisible(true);

}


}

Note that I would not design the code this way, but I wanted to keep it as close to the original as practical, while making it work to display a list of images on a Windows based box. 请注意,我不会以这种方式设计代码,但我希望保持尽可能接近原始代码,同时使其能够在基于Windows的框中显示图像列表。

列表显示

import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;

import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ListView {

    public static void main(String[] args) throws IOException {
        String path = "C:/Documents and Settings/All Users/Documents/" +
            "My Pictures/Sample Pictures";
        JFrame frame=new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        File folder = new File(path);
        File[] listOfFiles = folder.listFiles();
        DefaultListModel listModel = new DefaultListModel();
        int count = 0;
        for (int i = 0; i < listOfFiles.length; i++)
        {
            System.out.println("check path"+listOfFiles[i]);
            String name = listOfFiles[i].toString();
            // load only JPEGs
            if ( name.endsWith("jpg") ) {
                ImageIcon ii = new ImageIcon(ImageIO.read(listOfFiles[i]));
                listModel.add(count++, ii);
            }
        }
        JList lsm=new JList(listModel);
        lsm.setVisibleRowCount(1);

        frame.add(new JScrollPane(lsm));

        frame.pack();
        frame.setVisible(true);
    }
}

you can use listcellrenderer to display both image and text in jlist probably like the one below for showing label with icon in list 您可以使用listcellrenderer在jlist中显示图像和文本,可能类似于下面的列表中带有图标的标签

 public class myRenderer extends DefaultListCellRenderer
{
    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index,boolean isSelected, boolean cellHasFocus) 
    {
        //JLabel l = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        if(value instanceof JLabel)
        {
            this.setText(((JLabel)value).getText());
            this.setIcon(((JLabel)value).getIcon());
        }
        return this;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM