2012-03-03 15 views
3

ここは自分のコードです。フレーム内に画像が表示されず、代わりにテキストが表示されます。誰かが私に、フレーム内の画像を表示できるように、コード内で何を変えなければならないと私に示唆してくれますか?私はコードをこのように設計していないだろうが、それはWindowsベースボックス上の画像の一覧を表示するには、作業しながら私は、実用的な、オリジナルに近い、それを維持したい画像付き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

注意。

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

あなたはリスト

のアイコンを参考にしようとしているため
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

おかげでラベルを示すために、おそらく、以下のいずれかのようJListの中に画像とテキストの両方を表示するためにlistcellrendererを使用することができます - )ちょうど:a)ListModelのコンポーネントがまれにあることはほとんどありません。b)Java命名規則を学んでください。 – kleopatra

+0

thats right、しかし私の友人はリストにアイコン付きのjlabelを追加するのに問題がありました。何とか解決策を見つける – chirag

関連する問題