我有一个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);
}
}
}
但它仍然无效。你能帮帮我吗?
答案 0 :(得分:1)
您需要编写自己的ListModel,在内部存储List<File>
并从getElementAt(int index)
方法返回fileName。
答案 1 :(得分:1)
您可以通过创建自己的ListCellRenderer来更改内容在JList中呈现的方式。 (看看这个:http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/ListCellRenderer.html)
答案 2 :(得分:1)
您可以使用覆盖方法
传递jList.setCellRenderer()
的{{1}}
new DefaultListCellRenderer()
getListCellRendererComponent(JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus)
- 是您插入JList的对象,因此您可以存储它但显示另一个标签:
value
答案 3 :(得分:1)
除了提供的答案,这里是另一种方式。您可以将File对象包装在您自己的File类中。然后重载toString()方法以返回文件名。
class CustomFile extends File{
public CustomFile(File f){super(f.getAbsolutePath());}
public String toString(){return getName();}
}