The code is as follows:
Copy Code code as follows:
Package Swt_jface.demo6;
Import Java.io.File;
Import Java.util.Date;
Import Org.eclipse.jface.resource.ImageRegistry;
Import Org.eclipse.swt.SWT;
Import Org.eclipse.swt.graphics.Image;
Import Org.eclipse.swt.layout.GridData;
Import Org.eclipse.swt.layout.GridLayout;
Import Org.eclipse.swt.program.Program;
Import Org.eclipse.swt.widgets.Display;
Import Org.eclipse.swt.widgets.Shell;
Import org.eclipse.swt.widgets.Table;
Import Org.eclipse.swt.widgets.TableColumn;
Import Org.eclipse.swt.widgets.TableItem;
public class Filebrowser {
Display display = new display ();
Shell shell = new shell (display);
Table table;
File RootDir;
Image iconfolder = new Image (Shell.getdisplay (), "c:/icons/folder.gif");
Image iconfile = new Image (Shell.getdisplay (), "c:/icons/file.gif");
Public Filebrowser () {
GridLayout GridLayout = new GridLayout ();
Shell.setlayout (gridLayout);
Table = new Table (Shell, SWT. BORDER | Swt. Full_selection);
Table.setlinesvisible (TRUE);
Table.setheadervisible (TRUE);
TableColumn tcfilename = new TableColumn (table, SWT. left);
Tcfilename.settext ("File name");
Tcfilename.setimage (New Image (Shell.getdisplay (), "icons/folder.gif"));
TableColumn tcfilesize = new TableColumn (table, SWT. right);
Tcfilesize.settext ("Size");
TableColumn tcdatemodified = new TableColumn (table, SWT. right);
Tcdatemodified.settext ("Date Modified");
Tcfilename.setwidth (200);
Tcfilesize.setwidth (80);
Tcdatemodified.setwidth (180);
Tableitem item = new Tableitem (table, SWT. NULL);
Item.settext (New string[]{"Name", "Size"});
Table.setlayoutdata (New Griddata (Griddata.fill_both));
Table.pack ();
Shell.pack ();
Shell.open ();
Setrootdirectory (New File ("."));
while (!shell.isdisposed ()) {
if (!display.readanddispatch ()) {
Display.sleep ();
}
}
Display.dispose ();
}
private void Setrootdirectory (File dir) {
This.rootdir = dir;
if (! (Dir.exists () && dir.isdirectory ())
throw new IllegalArgumentException ("Invalid directory.");
Table.removeall ();
file[] files = dir.listfiles ();
for (int i=0; files!= null && i < files.length; i++) {
File file = Files[i];
Tableitem item = new Tableitem (table, SWT. NULL);
Item.setbackground (i% 2 = 0 shell.getdisplay (). Getsystemcolor (SWT. Color_white):
Shell.getdisplay (). Getsystemcolor (SWT. Color_gray));
Item.settext (0, File.getname ());
Item.settext (2, New Date (File.lastmodified ()). ToString ());
if (File.isdirectory ()) {
Item.setimage (0, Iconfolder);
}else{
int lastdot = File.getname (). LastIndexOf ('. ');
if (lastdot >= 0 && Lastdot < file.getname (). Length ()) {
Item.setimage (0, GetIcon (file.getname (). substring (lastdot+1)));
}
Long Kbytes = File.length ()/1024;
if (Kbytes = 0)
Kbytes = 1;
Item.settext (1, Kbytes + "KB");
}
}
}
Private Imageregistry imageregistry;
Public 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);
if (program!= null) {
Image = New Image (Shell.getdisplay (), Program.getimagedata ());
Imageregistry.put (extension, image);
}else{
image = IconFile;
}
return image;
}
public static void Main (string[] args) {
New Filebrowser ();
}
}
More examples of table operations:
Copy Code code as follows:
Package Swt_jface.demo6;
Import Org.eclipse.swt.SWT;
Import Org.eclipse.swt.custom.TableEditor;
Import Org.eclipse.swt.graphics.Point;
Import Org.eclipse.swt.graphics.Rectangle;
Import Org.eclipse.swt.layout.FillLayout;
Import Org.eclipse.swt.widgets.Display;
Import org.eclipse.swt.widgets.Event;
Import Org.eclipse.swt.widgets.Listener;
Import Org.eclipse.swt.widgets.Shell;
Import org.eclipse.swt.widgets.Table;
Import Org.eclipse.swt.widgets.TableColumn;
Import Org.eclipse.swt.widgets.TableItem;
Import Org.eclipse.swt.widgets.Text;
public class Main {
public static void Main (string[] args) {
Display display = new display ();
Shell shell = new shell (display);
Shell.setlayout (New Filllayout ());
Final table table = new Table (Shell, SWT. BORDER | Swt. MULTI);
Table.setlinesvisible (TRUE);
for (int i = 0; i < 3; i++) {
TableColumn column = new TableColumn (table, SWT. NONE);
Column.setwidth (100);
}
for (int i = 0; i < 3; i++) {
Tableitem item = new Tableitem (table, SWT. NONE);
Item.settext (new string[] {"" + I, "" + I, "" + i});
}
Final Tableeditor editor = new tableeditor (table);
Editor.horizontalalignment = SWT. Left;
Editor.grabhorizontal = true;
Table.addlistener (SWT. MouseDown, New Listener () {
public void Handleevent (event event) {
Rectangle Clientarea = Table.getclientarea ();
Point pt = new Point (Event.x, EVENT.Y);
int index = Table.gettopindex ();
while (Index < Table.getitemcount ()) {
Boolean visible = false;
Final Tableitem item = table.getitem (index);
for (int i = 0; i < Table.getcolumncount (); i++) {
Rectangle rect = item.getbounds (i);
if (Rect.contains (PT)) {
Final int column = i;
Final text = new text (table, SWT. NONE);
Listener textlistener = new Listener () {
public void Handleevent (final Event e) {
Switch (e.type) {
Case SWT. Focusout:
Item.settext (column, Text.gettext ());
Text.dispose ();
Break
Case SWT. Traverse:
Switch (e.detail) {
Case SWT. Traverse_return:
Item.settext (column, Text.gettext ());
Case SWT. Traverse_escape:
Text.dispose ();
E.doit = false;
}
Break
}
}
};
Text.addlistener (SWT. Focusout, TextListener);
Text.addlistener (SWT. Traverse, TextListener);
Editor.seteditor (text, item, i);
Text.settext (Item.gettext (i));
Text.selectall ();
Text.setfocus ();
Return
}
if (!visible && rect.intersects (Clientarea)) {
Visible = true;
}
}
if (!visible)
Return
index++;
}
}
});
Shell.pack ();
Shell.open ();
while (!shell.isdisposed ()) {
if (!display.readanddispatch ())
Display.sleep ();
}
Display.dispose ();
}
}
The following code is an enhancement to the Filebrowser feature:
Implementation 1:
Filebrowser.java
Copy Code code as follows:
Package Swt_jface.demo7;
Import Java.io.File;
Import org.eclipse.jface.action.Action;
Import Org.eclipse.jface.action.ToolBarManager;
Import Org.eclipse.jface.resource.ImageRegistry;
Import Org.eclipse.swt.SWT;
Import Org.eclipse.swt.custom.TreeEditor;
Import org.eclipse.swt.events.SelectionEvent;
Import Org.eclipse.swt.events.SelectionListener;
Import org.eclipse.swt.events.TreeEvent;
Import Org.eclipse.swt.events.TreeListener;
Import Org.eclipse.swt.graphics.Image;
Import Org.eclipse.swt.graphics.ImageData;
Import Org.eclipse.swt.graphics.Point;
Import Org.eclipse.swt.layout.GridData;
Import Org.eclipse.swt.layout.GridLayout;
Import Org.eclipse.swt.program.Program;
Import Org.eclipse.swt.widgets.DirectoryDialog;
Import Org.eclipse.swt.widgets.Display;
Import org.eclipse.swt.widgets.Event;
Import Org.eclipse.swt.widgets.Listener;
Import Org.eclipse.swt.widgets.Shell;
Import Org.eclipse.swt.widgets.Text;
Import Org.eclipse.swt.widgets.ToolBar;
Import Org.eclipse.swt.widgets.Tree;
Import Org.eclipse.swt.widgets.TreeItem;
public class Filebrowser {
Display display = new display ();
Shell shell = new shell (display);
Tree tree;
File RootDir;
Public Filebrowser () {
Action Actionsetrootdir = new Action ("Set Root Dir") {
public void Run () {
Directorydialog dialog = new Directorydialog (shell);
String path = Dialog.open ();
if (path!= null) {
Setrootdir (new File (path));
}
}
};
ToolBar ToolBar = new ToolBar (Shell, SWT. FLAT);
Toolbarmanager manager = new Toolbarmanager (ToolBar);
Manager.add (Actionsetrootdir);
Manager.update (TRUE);
Shell.setlayout (New GridLayout ());
Tree = new Tree (shell, SWT. BORDER);
Tree.setlayoutdata (New Griddata (Griddata.fill_both));
Setrootdir (New File ("C:/temp"));
Tree.addtreelistener (New Treelistener () {
public void treecollapsed (Treeevent e) {
}
public void treeexpanded (Treeevent e) {
TreeItem item = (TreeItem) e.item;
Treeitem[] Children = Item.getitems ();
for (int i = 0; i < children.length; i++)
if (children[i].getdata () = null)
Children[i].dispose ();
Else
Return
file[] files = ((File) Item.getdata ()). Listfiles ();
for (int i = 0; files!= null && i < files.length; i++)
Addfiletotree (item, files[i]);
}
});
Tree.addselectionlistener (New Selectionlistener () {
public void widgetselected (Selectionevent e) {
}
public void widgetdefaultselected (Selectionevent e) {
TreeItem item = (TreeItem) e.item;
File File = (file) item.getdata ();
if (Program.launch (File.getabsolutepath ())) {
SYSTEM.OUT.PRINTLN ("File has been launched:" + file);
} else {
System.out.println ("Unable to launch file:" + file);
}
}
});
Final Treeeditor editor = new Treeeditor (tree);
Tree.addlistener (SWT. MouseDown, New Listener () {
public void Handleevent (event event) {
Point point = new Point (Event.x, EVENT.Y);
Final TreeItem item = Tree.getitem (point);
if (item = NULL)
Return
Final text = new text (tree, SWT.) NONE);
Text.settext (Item.gettext ());
Text.setbackground (Shell.getdisplay (). Getsystemcolor (SWT. Color_yellow));
Editor.horizontalalignment = SWT. Left;
Editor.grabhorizontal = true;
Editor.seteditor (text, item);
Listener textlistener = new Listener () {
public void Handleevent (final Event e) {
Switch (e.type) {
Case SWT. Focusout:
File renamed =
RenameFile (
(File) Item.getdata (),
Text.gettext ());
if (renamed!= null) {
Item.settext (Text.gettext ());
Item.setdata (renamed);
}
Text.dispose ();
Break
Case SWT. Traverse:
Switch (e.detail) {
Case SWT. Traverse_return:
renamed =
RenameFile (
(File) Item.getdata (),
Text.gettext ());
if (renamed!= null) {
Item.settext (Text.gettext ());
Item.setdata (renamed);
}
Case SWT. Traverse_escape:
Text.dispose ();
E.doit = false;
}
Break
}
}
};
Text.addlistener (SWT. Focusout, TextListener);
Text.addlistener (SWT. Traverse, TextListener);
Text.setfocus ();
}
});
Shell.setsize (400, 260);
Shell.open ();
while (!shell.isdisposed ()) {
if (!display.readanddispatch ()) {
Display.sleep ();
}
}
Display.dispose ();
}
Private file RenameFile (file file, String newName) {
File Dest = new file (File.getparentfile (), newName);
if (File.renameto (dest)) {
return dest;
} else {
return null;
}
}
private void Setrootdir (File root) {
if ((!root.isdirectory ()) | | (!root.exists ()))
throw new IllegalArgumentException ("Invalid root:" + root);
This.rootdir = root;
Shell.settext ("Now browsing:" + Root.getabsolutepath ());
if (Tree.getitemcount () > 0) {
treeitem[] items = Tree.getitems ();
for (int i = 0; i < items.length; i++) {
Items[i].dispose ();
}
}
file[] files = root.listfiles ();
for (int i=0; files!= null && i < files.length; i++)
Addfiletotree (tree, files[i]);
}
private void Addfiletotree (Object parent, file file) {
TreeItem item = NULL;
if (parent instanceof Tree)
item = new TreeItem (tree) parent, SWT. NULL);
else if (parent instanceof TreeItem)
item = new TreeItem (TreeItem) parent, SWT. NULL);
Else
throw New IllegalArgumentException (
"Parent should is a tree or a tree item:" + parent);
Item.settext (File.getname ());
Item.setimage (GetIcon (file));
Item.setdata (file);
if (File.isdirectory ()) {
Recursively adds the children of this file.
file[] files = file.listfiles ();
for (int i=0; i<files.length; i++)
Buildtree (item, files[i]);
if (file.list ()!= null && file.list (). length > 0)
New TreeItem (item, SWT. NULL);
}
}
Private Imageregistry imageregistry;
Image iconfolder = new Image (Shell.getdisplay (), "c:/icons/folder.gif");
Image iconfile = new Image (Shell.getdisplay (), "c:/icons/file.gif");
Private 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;
}
Private 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 (Shell.getdisplay (), imagedata);
Imageregistry.put (extension, image);
} else {
image = IconFile;
}
return image;
}
public static void Main (string[] args) {
New Filebrowser ();
}
}
Implementation 2:
Filebrowserjface.java
Copy Code code as follows:
Package Swt_jface.demo7;
Import Java.io.File;
Import org.eclipse.jface.action.Action;
Import Org.eclipse.jface.action.ToolBarManager;
Import Org.eclipse.jface.resource.ImageRegistry;
Import org.eclipse.jface.viewers.IStructuredSelection;
Import Org.eclipse.jface.viewers.ITreeContentProvider;
Import Org.eclipse.jface.viewers.LabelProvider;
Import Org.eclipse.jface.viewers.TreeViewer;
Import Org.eclipse.jface.viewers.Viewer;
Import Org.eclipse.jface.viewers.ViewerFilter;
Import Org.eclipse.jface.viewers.ViewerSorter;
Import Org.eclipse.swt.SWT;
Import Org.eclipse.swt.graphics.Image;
Import Org.eclipse.swt.graphics.ImageData;
Import Org.eclipse.swt.layout.GridData;
Import Org.eclipse.swt.layout.GridLayout;
Import Org.eclipse.swt.program.Program;
Import Org.eclipse.swt.widgets.DirectoryDialog;
Import Org.eclipse.swt.widgets.Display;
Import Org.eclipse.swt.widgets.MessageBox;
Import Org.eclipse.swt.widgets.Shell;
Import Org.eclipse.swt.widgets.ToolBar;
public class Filebrowserjface {
Display display = new display ();
Shell shell = new shell (display);
File RootDir;
Treeviewer Treeviewer;
Public Filebrowserjface () {
Action Actionsetrootdir = new Action ("Set Root Dir") {
public void Run () {
Directorydialog dialog = new Directorydialog (shell);
String path = Dialog.open ();
if (path!= null) {
Treeviewer.setinput (new File (path));
}
}
};
Final Viewerfilter directoryfilter = new Viewerfilter () {
public Boolean Select (
Viewer Viewer,
Object parentelement,
Object Element) {
Return ((File) Element). Isdirectory ();
}
};
Action actionshowdirectoriesonly = new Action ("Show Directories only") {
public void Run () {
if (! ischecked ())
Treeviewer.removefilter (Directoryfilter);
Else
Treeviewer.addfilter (Directoryfilter);
}
};
Actionshowdirectoriesonly.setchecked (FALSE);
Action Actiondeletefile = new Action ("Delete the selected file") {
public void Run () {
Istructuredselection selection = (istructuredselection) treeviewer.getselection ();
File File = (file) selection.getfirstelement ();
if (file = = null) {
SYSTEM.OUT.PRINTLN ("Please select a file a");
Return
}
MessageBox MessageBox = new MessageBox (Shell, SWT. YES | swt.no);
Messagebox.setmessage ("Are you sure to delete file:" + file.getname () + "?");
if (messagebox.open () = SWT. YES) {
File parentfile = File.getparentfile ();
if (File.delete ()) {
System.out.println ("File has been deleted.");
Notifies the viewer for update.
Treeviewer.refresh (Parentfile, false);
}else{
System.out.println ("Unable to delete file.");
}
}
}
};
ToolBar ToolBar = new ToolBar (Shell, SWT. FLAT);
Toolbarmanager manager = new Toolbarmanager (ToolBar);
Manager.add (Actionsetrootdir);
Manager.add (actionshowdirectoriesonly);
Manager.add (Actiondeletefile);
Manager.update (TRUE);
Shell.setlayout (New GridLayout ());
Treeviewer = new Treeviewer (Shell, SWT. BORDER);
Treeviewer.gettree (). Setlayoutdata (New Griddata (Griddata.fill_both));
Treeviewer.setcontentprovider (New Itreecontentprovider () {
Public object[] GetChildren (Object parentelement) {
file[] files = ((File) parentelement). Listfiles ();
if (Files = null)
return new object[0];
return files;
}
public object GetParent (object element) {
Return ((File) Element). Getparentfile ();
}
public boolean HasChildren (Object element) {
File File = (file) element;
file[] files = file.listfiles ();
if (Files = null | | files.length = 0)
return false;
return true;
}
Public object[] GetElements (Object inputelement) {
file[] files = ((File) inputelement). Listfiles ();
if (Files = null)
return new object[0];
return files;
}
public void Dispose () {
}
public void inputchanged (
Viewer Viewer,
Object Oldinput,
Object newinput) {
Shell.settext ("Now browsing:" + newinput);
}
});
Treeviewer.setlabelprovider (New Labelprovider () {
Public Image GetImage (Object Element) {
Return GetIcon ((File) element);
}
Public String GetText (Object Element) {
Return ((File) Element). GetName ();
}
});
Treeviewer.setsorter (New Viewersorter () {
public int category (Object element) {
File File = (file) element;
if (File.isdirectory ())
return 0;
Else
return 1;
}
});
Treeviewer.setinput (New File ("C:/temp"));
Shell.setsize (400, 260);
Shell.open ();
while (!shell.isdisposed ()) {
if (!display.readanddispatch ()) {
Display.sleep ();
}
}
Display.dispose ();
}
Private file RenameFile (file file, String newName) {
File Dest = new file (File.getparentfile (), newName);
if (File.renameto (dest)) {
return dest;
} else {
return null;
// }
// }
Private Imageregistry imageregistry;
Image iconfolder = new Image (Shell.getdisplay (), "c:/icons/folder.gif");
Image iconfile = new Image (Shell.getdisplay (), "c:/icons/file.gif");
Private 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;
}
Private 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 (Shell.getdisplay (), imagedata);
Imageregistry.put (extension, image);
} else {
image = IconFile;
}
return image;
}
public static void Main (string[] args) {
New Filebrowserjface ();
}
}