
import java.awt.*; import java.awt.datatransfer.*; import java.awt.dnd.*; import javax.swing.*; import javax.swing.border.LineBorder; import javax.swing.filechooser.FileSystemView; import java.io.*; import java.util.List; public class FileDropList extends JPanel implements DropTargetListener { private DefaultListModel listModel = new DefaultListModel(); private DropTarget dropTarget; private JLabel jLabel1; private JScrollPane jScrollPane1; private JList list; public FileDropList() {
Original answer
import java.awt.datatransfer.*; import java.awt.dnd.*; import javax.swing.*; import javax.swing.filechooser.FileSystemView; import java.io.*; import java.util.List; public class FileDragList extends JPanel implements DropTargetListener { private static final long serialVersionUID = 1L; private DefaultListModel listModel = new DefaultListModel(); private JScrollPane jScrollPane1; private JList list; public FileDragList() { setLayout(null); list = new JList(); DropTarget dropTarget = new DropTarget(list, this); list.setModel(listModel); list.setDragEnabled(true); FileListCellRenderer renderer = new FileListCellRenderer(); list.setCellRenderer(renderer);
Icon icon=FileSystemView.getFileSystemView().getSystemIcon(file);
Oh right. Try the FileTreeCellRenderer option of the File Browser GUI.
What is it used for the tree on the left.

FileTreeCellRenderer
class FileTreeCellRenderer extends DefaultTreeCellRenderer { private FileSystemView fileSystemView; private JLabel label; FileTreeCellRenderer() { label = new JLabel(); label.setOpaque(true); fileSystemView = FileSystemView.getFileSystemView(); } @Override public Component getTreeCellRendererComponent( JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { DefaultMutableTreeNode node = (DefaultMutableTreeNode)value; File file = (File)node.getUserObject(); label.setIcon(fileSystemView.getSystemIcon(file)); label.setText(fileSystemView.getSystemDisplayName(file)); label.setToolTipText(file.getPath()); if (selected) { label.setBackground(backgroundSelectionColor); label.setForeground(textSelectionColor); } else { label.setBackground(backgroundNonSelectionColor); label.setForeground(textNonSelectionColor); } return label; } }
Update
SSCCE, which adapts the renderer above for lists.

import java.awt.*; import javax.swing.*; import javax.swing.filechooser.FileSystemView; import java.io.File; public class FileList { public static void main(String[] args) throws Exception { Runnable r = new Runnable() { @Override public void run() { JPanel gui = new JPanel(new BorderLayout(2,2)); File userHome = new File(System.getProperty("user.home")); File[] files = userHome.listFiles(); JList list = new JList(files); list.setCellRenderer(new FileListCellRenderer()); gui.add(new JScrollPane(list)); JOptionPane.showMessageDialog(null, gui); } }; SwingUtilities.invokeLater(r); } } class FileListCellRenderer extends DefaultListCellRenderer { private static final long serialVersionUID = -7799441088157759804L; private FileSystemView fileSystemView; private JLabel label; private Color textSelectionColor = Color.BLACK; private Color backgroundSelectionColor = Color.CYAN; private Color textNonSelectionColor = Color.BLACK; private Color backgroundNonSelectionColor = Color.WHITE; FileListCellRenderer() { label = new JLabel(); label.setOpaque(true); fileSystemView = FileSystemView.getFileSystemView(); } @Override public Component getListCellRendererComponent( JList list, Object value, int index, boolean selected, boolean expanded) { File file = (File)value; label.setIcon(fileSystemView.getSystemIcon(file)); label.setText(fileSystemView.getSystemDisplayName(file)); label.setToolTipText(file.getPath()); if (selected) { label.setBackground(backgroundSelectionColor); label.setForeground(textSelectionColor); } else { label.setBackground(backgroundNonSelectionColor); label.setForeground(textNonSelectionColor); } return label; } }
Andrew Thompson
source share