Apresentando ícones associados com os seus executáveis

Este exmplo apresenta um JList de programas disponíveis com seu respectivos ícones associados. Quando você dá o duplo clique na linha, o programa selecionado é executado.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.File;
import javax.swing.filechooser.FileSystemView; 
public class JListWithIconFromExe extends JList {  public JListWithIconFromExe() {
   setCellRenderer(new CustomCellRenderer());
   this.addMouseListener(new ActionJList(this));
   } 
public static void main(String[] args) throws Exception{
   JFrame frame = new JFrame();
   JPanel panel = new JPanel();
   Vector vector = new Vector();
   panel.setForeground(Color.black);
   panel.setBackground(Color.white); 
   JPanel jp1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
   File f1 = new File("c:/windows/notepad.exe");
   jp1.add(new JLabel
      (FileSystemView.getFileSystemView().getSystemIcon(f1)));
   jp1.add(new JLabel(f1.getCanonicalPath()));
   JPanel jp2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
   File f2 = new File("c:/windows/regedit.exe");
   jp2.add(new JLabel
      (FileSystemView.getFileSystemView().getSystemIcon(f2)));
   jp2.add(new JLabel(f2.getCanonicalPath())); 
   vector.addElement(jp1);
   vector.addElement(jp2); 
   JListWithIconFromExe jlwi = new JListWithIconFromExe();
   jlwi.setListData(vector);
   panel.add(jlwi);
   frame.getContentPane().add(panel);
   frame.setSize(300,300);
   frame.setVisible(true);
   } 
class CustomCellRenderer implements ListCellRenderer {
   public Component getListCellRendererComponent
(
JList list, Object value, int index,
    boolean isSelected,boolean cellHasFocus) {
     Component component = (Component)value;
     component.setBackground
(isSelected ? Color.yellow : Color.white);
    
return component;
     }
   }
} 
class ActionJList extends MouseAdapter{
  protected JList list;
  public ActionJList(JList l){
   list = l;
  } 
  public void mouseClicked(MouseEvent e){
   if(e.getClickCount() == 2){
   int index = list.locationToIndex(e.getPoint());
    ListModel dlm = list.getModel();
    Object item = dlm.getElementAt(index);
     list.ensureIndexIsVisible(index);
     System.out.println("Double clicked on " + item);
    JPanel jp = (JPanel) item; 
     Component[] c = jp.getComponents();
     JLabel jl = (JLabel)c[1];
     System.out.println(jl.getText());
    try {
       Runtime.getRuntime().exec(jl.getText());
     }
catch (Exception ex) { ex.printStackTrace(); }
    
}
   }
}