0

JListコンポーネントがあり、画像のパスを保存したいのですが、パスではなく画像の名前を表示したいと思います。次のような[ファイルを開く]ボタンを押すコードがあります。

 public void openButtonActionPerformed() {       

    int returnVal = fc.showDialog(null, "Open");

     if (returnVal == JFileChooser.APPROVE_OPTION) { 
           file = fc.getSelectedFile();
     }
    jList1.setCellRenderer(new JavaRenderer());
}

と:

class JavaRenderer extends DefaultListCellRenderer {

public JavaRenderer(){
    //setOpaque(true);
}
 public File file;  

 public Component getListCellRendererComponent(JList list,
                                            Object value,
                                            int index,
                                            boolean isSelected,
                                            boolean hasFocus) {

if (value instanceof File) {
  File file = (file) value;

     return super.getListCellRendererComponent(list, file.getName(), index, isSelected, hasFocus);
}else {
     return super.getListCellRendererComponent(list, value, index, isSelected, hasFocus);
}
}
}

しかし、それでも機能しません。それを手伝ってくれませんか。

4

4 に答える 4

1

独自のListModelを作成する必要があります。ここで、内部に格納し、メソッドList<File>からfileNameを返します。getElementAt(int index)

于 2012-05-22T18:30:59.340 に答える
1

独自のListCellRendererを作成することにより、JListでのコンテンツのレンダリング方法を変更できます。(これをチェックしてください:http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/ListCellRenderer.html

于 2012-05-22T18:31:00.760 に答える
1

オーバーライドされたメソッドjList.setCellRenderer()で渡す場所を使用できますnew DefaultListCellRenderer()

getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)

value-はJListに挿入するオブジェクトなので、保存しても別のラベルを表示できます。

if (value instanceof File) {
   File file = (File) value;
   return super.getListCellRendererComponent(list, file.getName(), index, isSelected, cellHasFocus);
} else {
   return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
}
于 2012-05-22T18:34:08.173 に答える
1

提供された回答に加えて、ここに別の方法があります。Fileオブジェクトを独自のFileクラスでラップできます。次に、toString()メソッドをオーバーロードして、ファイル名を返します。

class CustomFile extends File{
    public CustomFile(File f){super(f.getAbsolutePath());}
    public String toString(){return getName();}
}
于 2012-05-22T18:48:58.723 に答える