2012-03-03 203 views
3

這是我的代碼。它不會在框架中顯示圖像,而是顯示一些文字。有人會建議我在代碼中應該做些什麼改變,以便它能讓我在一個框架中顯示圖像?添加JLabel與圖像到JList以顯示所有圖像

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); 

} 


} 

回答

7

注意,我不會設計這樣的代碼,但我想保持它作爲接近原始實用,同時也使工作,顯示在一個基於Windows的對話框圖像列表。

ListView

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); 
    } 
} 
5

可以使用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; 
    } 
} 
+0

感謝嘗試是有益的一個同時顯示圖像和文字: - )只是:a)你很少(如從來沒有)在ListModel中有組件b)請學習java命名約定,並堅持他們 – kleopatra 2012-03-31 12:29:51

+0

這是正確的,但我的朋友遇到麻煩添加jlabel圖標的名單,所以我有以某種方式找到解決方案 – chirag 2012-03-31 16:52:06