Jar包一览: org.eclipse.jface_3.4.2.M20090107-0800.jar org.eclipse.swt.win32.win32.x86_3.4.1.v3452b.jar org.eclipse.core.commands_3.4.0.I20080509-2000.jar org.eclipse.core.runtime_3.4.0.v20080512.jar org.eclipse.equinox.common_3.4.0.v20080421-2006.jar org.eclipse.osgi_3.4.3.R34x_v20081215-1030.jar commons-net-ftp-2.0.jar 演示代码如下: FTPWindow.java 复制代码 代码如下:package swt_jface.demo13; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.apache.commons.net.ProtocolCommandEvent; import org.apache.commons.net.ProtocolCommandListener; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.SWT; import org.www.devze.comeclipse.swt.custom.SashForm; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DragSource; import org.eclipse.swt.dnd.DragSourceEvent; import org.eclipse.swt.dnd.DragSourceListener; import org.eclipse.swt.dnd.DropTarget; import org.eclipse.swt.dnd.DropTargetEvent; import org.eclipse.swt.dnd.DropTargetListener; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; public class FTPWindow extends ApplicationWindow { TableViewer localDirBrowser; TableViewer remoteDirBrowser; Label labelPathLocal; Label labelPathRemote; StyledText textLog; ConnectionDialog connectionDialog; Action actionUpLocalDir; Action actionUpRemoteDir; Action actionBrowseLocalDir; Action actionConnect; Action actionDisconnect; Action actionDisplayAbout; Action actionExit; FTPClient ftp; ConnectionInfo connectionInfo; public FTPWindow(Shell parentShell) { super(parentShell); createActions(); addStatusLine(); //addCoolBar(SWT.FLAT | SWT.RIGHT); addToolBar(SWT.FLAT); addMenuBar(); ftp = new FTPClient(); ftp.addProtocolCommandListener(new ProtocolCommandListener() { public void protocolCommandSent(ProtocolCommandEvent e) { logMessage("> " + e.getCommand(), false); } public void protocolReplyReceived(ProtocolCommandEvent e) { logMessage("< " + e.getMessage(), false); } }); } private void createActions() { actionUpLocalDir = new Action() { public void run() { if (localDirBrowser.getInput() == null) return; File dir = ((File) localDirBrowser.getInput()).getParentFile(); if (dir != null) { localDirBrowser.setInput(dir); labelPathLocal.setText("Path: " + dir); } } }; actionUpLocalDir.setText("Up"); actionUpLocalDir.setToolTipText("Up one level - local dir"); actionUpLocalDir.setImageDescriptor(ImageDescriptor.createFromFile(null, "C:/icons/ftp/up.gif")); actionBrowseLocalDir = new Action() { public void run() { DirectoryDialog dialog = new DirectoryDialog(getShell()); String path = dialog.open(); if (path == null) return; File file = new File(path); localDirBrowser.setInput(file); labelPathLocal.setText("Path: " + file); } }; actionBrowseLocalDir.setText("Browse..."); actionBrowseLocalDir.setToolTipText("Browse local directory"); actionBrowseLocalDir.setImageDescriptor(ImageDescriptor.createFromFile(null, "C:/icons/ftp/browse.gif")); actionConnect = new Action() { public void run() { if (connectionDialog == null) connectionDialog = new ConnectionDialog(FTPWindow.this); if (connectionDialog.open() == Dialog.OK) { connectionInfo = connectionDialog.getConnectionInfo(); if (connectionInfo == null) { logError("Failed to get connection information."); } else { logMessage("Connecting to " + connectionInfo.host, true); try { ftp.connect( connectionInfo.host, connectionInfo.port); if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) throw new RuntimeException("FTP server refused connection."); logMessage("Connected to " + connectionInfo.host, true); } catch (Exception e) { logError(e.toString()); return; } try { if (ftp .login( connectionInfo.username, connectionInfo.password)) { logMessage("Logged in as user: "+ connectionInfo.username, true); } labelPathRemote.setText("Path: " + ftp.printWorkingDirectory()); // Lists files. FTPFile[] files = ftp.listFiles(); remoteDirBrowser.setInput(files); } catch (IOException e1) { logError(e1.getMessage()); try { ftp.disconnect(); } catch (IOException e2) { // } } } } } }; actionConnect.setText("Connect"); actionConnect.setToolTipText("Connect to remote host"); actionConnect.setImageDescriptor(ImageDescriptor.createFromFile(null, "C:/icons/ftp/connect.gif")); actionDisconnect = new Action() { public void run() { try { ftp.logout(); ftp.disconnect(); }catch(Exception e) { logError(e.toString()); } } }; actionDisconnect.setText("Disconnect"); actionDisconnect.setToolTipText("Disconnect from remote host"); actionDisconnect.setImageDescriptor(ImageDescriptor.createFromFile(null, "C:/icons/ftp/stop.gif")); actionUpRemoteDir = new Action() { public void run() { try { if (ftp.changeToParentDirectory()) { labelPathRemote.setText("Path: " + ftp.printWorkingDirectory()); FTPFile[] files = ftp.listFiles(); remoteDirBrowser.setInput(files); } } catch (Exception e) { logError(e.toString()); } } }; actionUpRemoteDir.setText("Up"); actionUpRemoteDir.setToolTipText("Up one level - remote dir"); actionUpRemoteDir.setImageDescriptor(ImageDescriptor.createFromFile(null, "C:/icons/ftp/up.gif")); actionDisplayAbout = new Action() { public void run() { MessageDialog.openInformation(getShell(), "About", "FTP Client v1.0\nAll right reserved by Jack Li Guojie."); } }; actionDisplayAbout.setText("About"); actionDisplayAbout.setImageDescriptor(ImageDescriptor.createFromFile(null, "C:/icons/ftp/about.gif")); actionExit = new Action() { public void run() { if(! MessageDialog.openConfirm(getShell(), "Confirm", "Are you sure you want to exit?")) return; try { ftp.disconnect(); }catch(Exception e) { } close(); } }; actionExit.setTehttp://www.devze.comxt("Exit"); actionExit.setImageDescriptor(ImageDescriptor.createFromFile(null, "C:/icons/ftp/close.gif")); } private void dragNDropSupport() { int operations = DND.DROP_COPY | DND.DROP_MOVE; final DragSource dragSource = new DragSource(remoteDirBrowser.getControl(), operations); Transfer[] formats = new Transfer[] { TextTransfer.getInstance()}; dragSource.setTransfer(formats); dragSource.addDragListener(new DragSourceListener() { public void dragStart(DragSourceEvent event) { System.out.println("DND starts"); IStructuredSelection selection = (IStructuredSelection) remoteDirBrowser.getSelection(); FTPFile file = (FTPFile) selection.getFirstElement(); if (file == null || file.isDirectory()) { event.doit = false; } } public void dragSetData(DragSourceEvent event) { if (TextTransfer.getInstance().isSupportedType(event.dataType)) { IStructuredSelection selection = (IStructuredSelection) remoteDirBrowser.getSelection(); FTPFile file = (FTPFile) selection.getFirstElement(); if (file == null || file.isDirectory()) { event.doit = false; } else { event.data = file.getName(); } } } public void dragFinished(DragSourceEvent event) { } }); remoteDirBrowser .getControl() .addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { dragSource.dispose(); } }); final DropTarget dropTarget = new DropTarget(localDirBrowser.getControl(), operations); dropTarget.setTransfer(formats); dropTarget.addDropListener(new DropTargetListener() { public void dragEnter(DropTargetEvent event) { } public void dragLeave(DropTargetEvent event) { } public void dragOperationChanged(DropTargetEvent event) { } public void dragOver(DropTargetEvent event) { } public void drop(DropTargetEvent event) { if (TextTransfer.getInstance().isSupportedType(event.currentDataType)) { String text = (String) event.data; File target = new File((File) localDirBrowser.getInput(), text); if (target.exists()) { if (!MessageDialog.openConfirm(getShell(), "Overwriting confirmation", "Overwrite file " + target + "?")) { return; } } try { FileOutputStream stream = new FileOutputStream(target); if(ftp.retrieveFile(text, stream)) { logMessage("File retrieved successfully.", true); localDirBrowser.refresh(); }else{ logError("Failed to retrieve file: " + text); } stream.close(); } catch (IOException e) { e.printStackTrace(); } } } public void dropAccept(DropTargetEvent event) { } }); localDirBrowser.getControl().addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { dropTarget.dispose(); } }); } protected MenuManager createMenuManager() { MenuManager bar = new MenuManager(); MenuManager menuFile = new MenuManager("&File"); menuFile.add(actionConnect); menuFile.add(actionDisconnect); menuFile.add(new Separator()); menuFile.add(actionExit); MenuManager menuLocal = new MenuManager("&Local"); menuLocal.add(actionBrowseLocalDir); menuLocal.add(actionUpLocalDir); MenuManager menuRemote = new MenuManager("&Remote"); menuRemote.add(actionUpRemoteDir); &nbs编程客栈p; MenuManager menuHelp = new MenuManager("&Help"); menuHelp.add(actionDisplayAbout); bar.add(menuFile); bar.add(menuLocal); bar.add(menuRemote); bar.add(menuHelp); bar.updateAll(true); return bar; } public static void addAction( ToolBarManager manager, Action action, boolean displayText) { if (!displayText) { manager.add(action); return; } else { ActionContributionItem item = new ActionContributionItem(action); item.setMode(ActionContributionItem.MODE_FORCE_TEXT); manager.add(item); } } protected ToolBarManager createToolBarManager(int style) { ToolBarManager manager = super.createToolBarManager(style); addAction(manager, actionConnect, true); addAction(manager, actionDisconnect, true); manager.add(new Separator()); addAction(manager, actionBrowseLocalDir, true); addAction(manager, actionUpLocalDir, true); manager.add(new Separator()); addAction(manager, actionUpRemoteDir, true); manager.add(new Separator()); addAction(manager, actionDisplayAbout, true); addAction(manager, actionExit, true); manager.update(true); return manager; } protected Control createContents(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new FillLayout()); SashForm verticalForm = new SashForm(composite, SWT.VERTICAL); SashForm horizontalForm = new SashForm(verticalForm, SWT.HORIZONTAL); Composite compositeLocalDir = new Composite(horizontalForm, SWT.NULL); GridLayout gridLayout = new GridLayout(); gridLayout.horizontalSpacing = 1; gridLayout.verticalSpacing = 1; compositeLocalDir.setLayout(gridLayout); Group compositeLocalDirTop = new Group(compositeLocalDir, SWT.NULL); compositeLocalDirTop.setText("Local"); GridLayout gridLayout2 = new GridLayout(3, false); gridLayout2.marginHeight = 0; compositeLocalDirTop.setLayout(gridLayout2); compositeLocalDirTop.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); labelPathLocal = new Label(compositeLocalDirTop, SWT.NULL); labelPathLocal.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); labelPathLocal.setText("Path: "); Button buttonUpLocalDir = new Button(compositeLocalDirTop, SWT.PUSH); buttonUpLocalDir.setText(actionUpLocalDir.getText()); buttonUpLocalDir.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { actionUpLocalDir.run(); } }); Button buttonBrowseLocalDir = new Button(compositeLocalDirTop, SWT.PUSH); buttonBrowseLocalDir.setText(actionBrowseLocalDir.getText()); buttonBrowseLocalDir.addListener(SWT.Selection, new Listener() { public void handleEvent(Event eve编程客栈nt) { actionBrowseLocalDir.run(); } }); Table table = new Table(compositeLocalDir, SWT.BORDER); TableColumn tcFile = new TableColumn(table, SWT.LEFT); tcFile.setText("Name"); TableColumn tcSize = new TableColumn(table, SWT.NULL); tcSize.setText("Size"); TableColumn tcDate = new TableColumn(table, SWT.NULL); tcDate.setText("Date"); tcFile.setWidth(200); tcSize.setWidth(100); tcDate.setWidth(100); table.setHeaderVisible(true); table.setLayoutData(new GridData(GridData.FILL_BOTH)); localDirBrowser = new LocalDirectoryBrowser(table); table.addListener(SWT.MouseDoubleClick, new Listener() { public void handleEvent(Event event) { IStructuredSelection selection = (IStructuredSelection) localDirBrowser.getSelection(); File file = (File) selection.getFirstElement(); if (file != null && file.isDirectory()) { localDirBrowser.setInput(file); labelPathLocal.setText("Path: " + file); } } }); Composite compositeRemoteDir = new Composite(horizontalForm, SWT.NULL); gridLayout = new GridLayout(); gridLayout.horizontalSpacing = 1; gridLayout.verticalSpacing = 1; compositeRemoteDir.setLayout(gridLayout); Group compositeRemoteDirTop = new Group(compositeRemoteDir, SWT.NULL); compositeRemoteDirTop.setText("Remote"); gridLayout2 = new GridLayout(2, false); gridLayout2.marginHeight = 0; compositeRemoteDirTop.setLayout(gridLayout2); compositeRemoteDirTop.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); labelPathRemote = new Label(compositeRemoteDirTop, SWT.NULL); labelPathRemote.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); labelPathRemote.setText("Path: "); Button buttonUpRemoteDir = new Button(compositeRemoteDirTop, SWT.PUSH); buttonUpRemoteDir.setText(actionUpLocalDir.getText()); buttonUpRemoteDir.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { actionUpRemoteDir.run(); } }); Table tableRemote = new Table(compositeRemoteDir, SWT.BORDER); TableColumn tcFileRemote = new TableColumn(tableRemote, SWT.LEFT); tcFileRemote.setText("Name"); TableColumn tcSizeRemote = new TableColumn(tableRemote, SWT.NULL); tcSizeRemote.setText("Size"); TableColumn tcDateRemote = new TableColumn(tableRemote, SWT.NULL); tcDateRemote.setText("Date"); tcFileRemote.setWidth(200); tcSizeRemote.setWidth(100); tcDateRemote.setWidth(100); tableRemote.setHeaderVisible(true); tableRemote.setLayoutData(new GridData(GridData.FILL_BOTH)); remoteDirBrowser = new RemoteDirectoryBrowser(tableRemote); tableRemote.addListener(SWT.MouseDoubleClick, new Listener() { public void handleEvent(Event event) { IStructuredSelection selection = (IStructuredSelection) remoteDirBrowser.getSelection(); FTPFile file = (FTPFile) selection.getFirstElement(); if (file != null && file.isDirectory()) { try { ftp.changeWorkingDirectory(file.getName()); labelPathRemote.setText("Path: " + ftp.printWorkingDirectory()); remoteDirBrowser.setInput(ftp.listFiles()); 开发者_C教程 } catch (IOException e) { logError(e.toString()); } } } }); textLog = new StyledText( verticalForm, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); localDirBrowser.setInput(File.listRoots()[0]); labelPathLocal.setText("Path: " + File.listRoots()[0]); verticalForm.setWeights(new int[]{4, 1}); dragNDropSupport(); getToolBarControl().setBackground(new Color(getShell().getDisplay(), 230, 230, 230)); getShell().setImage(new Image(getShell().getDisplay(), "C:/icons/ftp/ftp.gif")); getShell().setText("FTP Client v1.0"); return composite; } private void logMessage(String message, boolean showInStatusBar) { StyleRange styleRange1 = new StyleRange(); styleRange1.start = textLog.getCharCount(); styleRange1.length = message.length(); styleRange1.foreground = getShell().getDisplay().getSystemColor(SWT.COLOR_DARK_GREEN); styleRange1.fontStyle = SWT.NORMAL; textLog.append(message + "\r\n"); textLog.setStyleRange(styleRange1); textLog.setSelection(textLog.getCharCount()); if(showInStatusBar) { setStatus(message); } } private void logError(String message) { StyleRange styleRange1 = new StyleRange(); styleRange1.start = textLog.getCharCount(); styleRange1.length = message.length(); styleRange1.foreground = getShell().getDisplay().getSystemColor(SWT.COLOR_DARK_RED); styleRange1.fontStyle = SWT.NORMAL; textLog.append(message + "\r\n"); textLog.setStyleRange(styleRange1); textLog.setSelection(textLog.getCharCount()); } public static void main(String[] args) { ApplicationWindow window = new FTPWindow(null); window.setBlockOnOpen(true); window.open(); Display.getCurrent().dispose(); } }ConnectionDialog.java复制代码 代码如下:package swt_jface.demo13; import java.io.File; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.DialogSettings; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; class ConnectionInfo { public String host; public int port; public String password; public String username; } public class ConnectionDialog extends Dialog { private static final String DIALOG_SETTING_FILE = "ftp.connection.xml"; private static final String KEY_HOST = "HOST"; private static final String KEY_PORT = "PORT"; private static final String KEY_USERNAME = "USER"; private static final String KEY_PASSWORD = "PASSWORD"; Text textHost; Text textPort; Text textUsername; Text textPassword; DialogSettings dialogSettings; ConnectionInfo connectionInfo; ConnectionDialog(FTPWindow window) { super(window.getShell()); connectionInfo = null; dialogSettings = new DialogSettings("FTP"); try { dialogSettings.load(DIALOG_SETTING_FILE); }catch(Exception e) { e.printStackTrace(); } } protected Control createDialogArea(Composite parent) { getShell().setText("Connection Settings"); Composite composite = (Composite)super.createDialogArea(parent); composite.setLayout(new GridLayout(2, false)); new Label(composite, SWT.NULL).setText("Host: "); textHost = new Text(composite, SWT.BORDER); textHost.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); new Label(composite, SWT.NULL).setText("Port: "); textPort = new Text(composite, SWT.BORDER); textPort.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); new Label(composite, SWT.NULL).setText("Username: "); textUsername = new Text(composite, SWT.BORDER); textUsername.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); new Label(composite, SWT.NULL).setText("Password: "); textPassword = new Text(composite, SWT.PASSWORD | SWT.BORDER); textPassword.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); try { textHost.setText(dialogSettings.get(KEY_HOST)); textPort.setText(dialogSettings.getInt(KEY_PORT) + ""); textUsername.setText(dialogSettings.get(KEY_USERNAME)); textPassword.setText(dialogSettings.get(KEY_PASSWORD)); }catch(Exception e) { } return composite; } public ConnectionInfo getConnectionInfo() { return connectionInfo; } protected void okPressed() { try { if(! new File(DIALOG_SETTING_FILE).exists()) { new File(DIALOG_SETTING_FILE).createNewFile(); } dialogSettings.put(KEY_HOST, textHost.getText()); dialogSettings.put(KEY_PORT, Integer.parseInt(textPort.getText().trim())); dialogSettings.put(KEY_USERNAME, textUsername.getText()); dialogSettings.put(KEY_PASSWORD, textPassword.getText()); dialogSettings.save(DIALOG_SETTING_FILE); }catch(Exception e) { e.printStackTrace(); } connectionInfo = new ConnectionInfo(); connectionInfo.host = textHost.getText(); connectionInfo.port = Integer.parseInt(textPort.getText().trim()); connectionInfo.username = textUsername.getText(); connectionInfo.password = textPassword.getText(); super.okPressed(); } }FileIconUtil.java复制代码 代码如下:package swt_jface.demo13; import java.io.File; import org.apache.commons.net.ftp.FTPFile; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.program.Program; import org.eclipse.swt.widgets.Display; public class FileIconUtil { static ImageRegistry imageRegistry; static Image iconFolder; static Image iconFile; static { iconFolder = new Image(Display.getCurrent(), "C:/icons/folder.gif"); iconFile = new Image(Display.getCurrent(), "C:/icons/file.gif"); } public static Image getIcon(File file) { if (file.isDirectory()) return iconFolder; int lastDotPos = file.getName().indexOf('.'); if (lastDotPos == -1) return iconFile; Image image = getIcon(file.getName().substring(lastDotPos + 1)); return image == null ? iconFile : image; } public static Image getIcon(FTPFile file) { if (file.isDirectory()) return iconFolder; int lastDotPos = file.getName().indexOf('.'); if (lastDotPos == -1) return iconFile; Image image = getIcon(file.getName().substring(lastDotPos + 1)); return image == null ? iconFile : image; } private static Image getIcon(String extension) { if (imageRegistry == null) imageRegistry = new ImageRegistry(); Image image = imageRegistry.get(extension); if (image != null) return image; Program program = Program.findProgram(extension); ImageData imageData = (program == null ? null : program.getImageData()); if (imageData != null) { image = new Image(Display.getCurrent(), imageData); imageRegistry.put(extension, image); } else { image = iconFile; } return image; } }LocalDirectoryBrowser.java 复制代码 代码如下: package swt_jface.demo13; import java.io.File; import java.util.Date; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Table; public class LocalDirectoryBrowser extends TableViewer { public LocalDirectoryBrowser(Table table) { super(table); init(); } private void init() { setContentProvider(new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { File dir = (File)inputElement; return dir.listFiles(); } public void dispose() { } public void inputChanged( Viewer viewer, Object oldInput, Object newInput) { } }); setLabelProvider(new ITableLabelProvider() { public Image getColumnImage(Object element, int columnIndex) { if(columnIndex == 0) return FileIconUtil.getIcon((File)element); return null; } public String getColumnText(Object element, int columnIndex) { switch(columnIndex) { case 0: return ((File)element).getName(); case 1: return ((File)element).length() + ""; case 2: return new Date(((File)element).lastModified()).toString(); default: return ""; } } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { } }); } } package swt_jface.demo13; import java.io.File; import java.util.Date; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viehttp://www.devze.comwers.Viewer; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Table; public class LocalDirectoryBrowser extends TableViewer { public LocalDirectoryBrowser(Table table) { super(table); init(); } private void init() { setContentProvider(new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { File dir = (File)inputElement; return dir.listFiles(); } public void dispose() { } public void inputChanged( Viewer viewer, Object oldInput, Object newInput) { } }); setLabelProvider(new ITableLabelProvider() { public Image getColumnImage(Object element, int columnIndex) { if(columnIndex == 0) return FileIconUtil.getIcon((File)element); return null; } public String getColumnText(Object element, int columnIndex) { switch(columnIndex) { case 0: return ((File)element).getName(); case 1: return ((File)element).length() + ""; case 2: return new Date(((File)element).lastModified()).toString(); default: return ""; } } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { } }); } } RemoteDirectoryBrowser.java 复制代码 代码如下: package swt_jface.demo13; import java.util.Calendar; import org.apache.commons.net.ftp.FTPFile; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Table; public class RemoteDirectoryBrowser extends TableViewer { public RemoteDirectoryBrowser(Table table) { super(table); init(); } private void init() { setContentProvider(new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { FTPFile[] files = (FTPFile[])inputElement; return files; } public void dispose() { } public void inputChanged( Viewer viewer, Object oldInput, Object newInput) { } }); setLabelProvider(new ITableLabelProvider() { public Image getColumnImage(Object element, int columnIndex) { if(columnIndex == 0) return FileIconUtil.getIcon((FTPFile)element); return null; } public String getColumnText(Object element, int columnIndex) { switch(columnIndex) { case 0: return ((FTPFile)element).getName(); case 1: return ((FTPFile)element).getSize() + ""; case 2: Calendar cal = ((FTPFile)element).getTimestamp(); return cal.get(Calendar.YEAR) + "-" + cal.get(Calendar.MONTH) + "-" + cal.get(Calendar.DAY_OF_MONTH) + " " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND); default: return ""; } } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { } }); } }
精彩评论