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(); }
}
}
}