Приведенный ниже код должен получить значок каталога по умолчанию из JFileChooser, а затем использовать этот значок в моем пользовательском списке «Последние каталоги», который предоставляется в качестве аксессуара к диалоговому окну JFileChooser. Может кто-нибудь объяснить, почему приведенный ниже код не работает (в частности, почему setIcon в DefaultListRenderer не работает), и скажите мне, как поместить значок рядом с каждым элементом в JList? Я бы предпочел не реализовывать свой собственный ListCellRenderer, если только это не единственный способ заставить эту работу работать.
import java.awt.*;
import java.io.File;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class Chooser extends JPanel {
private static final String[] BUTTON_TEXTS = { "Hello", "Goodbye",
"Hello Goodbye", "Adios", "This is a long String for WTF", "Hello",
"Goodbye", "Hello Goodbye", "Adios", "This string WTF" };
public Chooser(Icon icon) {
this.setLayout(new BorderLayout());
JPanel labelPanel = new JPanel(new BorderLayout());
JLabel label = new JLabel("Recent Directories:");
labelPanel.add(label, BorderLayout.LINE_START);
labelPanel.setBackground(Color.LIGHT_GRAY);
labelPanel.setBorder(new EmptyBorder(5, 10, 5, 0));
DefaultListModel model = new DefaultListModel();
JList list = new JList(model);
DefaultListCellRenderer renderer = (DefaultListCellRenderer)list.getCellRenderer();
renderer.setIcon(icon);
for (String s : BUTTON_TEXTS) model.addElement(s);
list.setBorder(new EmptyBorder(0, 5, 5, 0));
list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
// respond to selection here
}
});
add(labelPanel, BorderLayout.PAGE_START);
// add(new JScrollPane(buttonPanel), BorderLayout.CENTER);
add(new JScrollPane(list), BorderLayout.CENTER);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
JFileChooser fileChooser = new JFileChooser();
Icon icon = fileChooser.getIcon(new File("."));
/*JFrame frame = new JFrame();
frame.setSize(100,100);
JPanel temp = new JPanel();
JLabel tlbl = new JLabel("picture");
tlbl.setIcon(icon);
temp.add(tlbl);
frame.add(temp);
frame.setVisible(true);*/
Chooser c = new Chooser(icon);
fileChooser.setAccessory(c);
fileChooser.showOpenDialog(null);
}
}