效果图: code: package lab.sodino.jsr75; import java.io.IOException; import java.util.Enumeration; import java.util.Vector; import javax.microedition.io.Connector; import javax.microedition.io.file.FileConnection; import javax.microedition.io.file.FileSystemRegistry; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; import com.sun.lwuit.Display; import com.sun.lwuit.Form; import com.sun.lwuit.List; import com.sun.lwuit.events.ActionEvent; import com.sun.lwuit.events.ActionListener; import com.sun.lwuit.layouts.BorderLayout; import com.sun.lwuit.list.DefaultListModel; import com.sun.lwuit.plaf.UIManager; import com.sun.lwuit.util.Resources; public class Jsr75Test03 extends MIDlet { private Form f; private List directoryList; private String currDirName = ""; public final static String UPStr = "UP.."; public Jsr75Test03() { Display.init(this); try { Resources r = Resources.open("/javaTheme.res"); UIManager.getInstance().setThemeProps(r.getTheme("javaTheme")); } catch (IOException e) { e.printStackTrace(); } f = new Form("JSR75Form"); f.setLayout(new BorderLayout()); directoryList = createDirectoryList(); f.addComponent(BorderLayout.CENTER, directoryList); } protected void destroyApp(boolean unconditional) throws MIDletStateChangeException { // TODO Auto-generated method stub } protected void pauseApp() { // TODO Auto-generated method stub } protected void startApp() throws MIDletStateChangeException { // TODO Auto-generated method stub f.show(); } private Vector getTraverseEntryItem(String currDirName) { Enumeration e = null; Vector vecItems = new Vector(); if (currDirName.equals("")) { e = FileSystemRegistry.listRoots(); } else { try { FileConnection currDir = (FileConnection) Connector.open("file:///" + currDirName); e = currDir.list(); currDir.close(); } catch (IOException e1) { System.out.println("go to catch file:///" + currDirName); e1.printStackTrace(); } } //Folders first and then files, alphabetically arranged int folderCount = 0; while (e.hasMoreElements()) { String fileName = (String) (e.nextElement()); if (fileName.endsWith("/")) { System.out.println("folder added " + fileName + " folderCount = " + folderCount); vecItems.insertElementAt(fileName, folderCount); folderCount++; } else { System.out.println("file added " + fileName); vecItems.addElement(fileName); } } //if view a sub-directory folder, added the UPStr at the head. if (currDirName.equals("") == false) { vecItems.insertElementAt(UPStr, 0); } return vecItems; } private List createDirectoryList() { DefaultListModel model = new DefaultListModel(getTraverseEntryItem(currDirName)); final List list = new List(model); list.setFixedSelection(List.FIXED_NONE_CYCLIC); list.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { updateCurrDirName(list.getSelectedItem().toString()); System.out.println("sodino : " + list.getSelectedItem().toString()); } }); return list; } private void updateCurrDirName(String selStr) { if (selStr.equals(UPStr)) { f.removeAll(); int i = currDirName.lastIndexOf('/', currDirName.length() - 2); if (i == -1) { currDirName = ""; } else { currDirName = currDirName.substring(0, i + 1); } directoryList = createDirectoryList(); f.addComponent(BorderLayout.CENTER, directoryList); f.revalidate(); } else if (selStr.endsWith("/")) { f.removeAll(); currDirName += selStr; directoryList = createDirectoryList(); f.addComponent(BorderLayout.CENTER, directoryList); f.revalidate(); } } }