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