The code is as follows:
Implementation 1:
Bugtracker.java
Copy Code code as follows:
Package Swt_jface.demo6;
Import Java.io.DataInputStream;
Import Java.io.DataOutputStream;
Import Java.io.File;
Import Java.io.FileInputStream;
Import Java.io.FileOutputStream;
Import java.io.IOException;
Import Java.util.Arrays;
Import Java.util.Comparator;
Import org.eclipse.jface.action.Action;
Import Org.eclipse.jface.action.Separator;
Import Org.eclipse.jface.action.ToolBarManager;
Import Org.eclipse.swt.SWT;
Import Org.eclipse.swt.custom.TableEditor;
Import Org.eclipse.swt.graphics.Image;
Import Org.eclipse.swt.graphics.Point;
Import Org.eclipse.swt.graphics.Rectangle;
Import Org.eclipse.swt.layout.GridData;
Import Org.eclipse.swt.layout.GridLayout;
Import Org.eclipse.swt.widgets.Button;
Import Org.eclipse.swt.widgets.Display;
Import org.eclipse.swt.widgets.Event;
Import Org.eclipse.swt.widgets.Listener;
Import Org.eclipse.swt.widgets.MessageBox;
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;
Import Org.eclipse.swt.widgets.ToolBar;
public class BugTracker {
Display display = new display ();
Shell shell = new shell (display);
Table table;
Image Bugicon = new Image (Shell.getdisplay (), "c:/icons/bug.gif");
Public BugTracker () {
GridLayout GridLayout = new GridLayout ();
Shell.setlayout (gridLayout);
Shell.settext ("Bug tracking System");
Action actionaddnew = new Action ("New Bug") {
public void Run () {
Tableitem item = new Tableitem (table, SWT. NULL);
Item.setimage (Bugicon);
Table.select (Table.getitemcount ()-1);
}
};
Action Actiondelete = new Action ("Delete selected") {
public void Run () {
int index = Table.getselectionindex ();
if (Index < 0) {
SYSTEM.OUT.PRINTLN ("Please select a item A.");
Return
}
MessageBox MessageBox = new MessageBox (Shell, SWT. YES | swt.no);
Messagebox.settext ("confirmation");
Messagebox.setmessage ("Are you sure to remove the bug with ID #" + table.getitem (Index). GetText (0));
if (messagebox.open () = SWT. YES) {
Table.remove (index);
}
}
};
Action Actionsave = new Action ("Save") {
public void Run () {
Savebugs ();
}
};
ToolBar ToolBar = new ToolBar (Shell, SWT. Right | Swt. FLAT);
Toolbarmanager manager = new Toolbarmanager (ToolBar);
Manager.add (actionaddnew);
Manager.add (Actiondelete);
Manager.add (New Separator ());
Manager.add (Actionsave);
Manager.update (TRUE);
Table = new Table (Shell, SWT. BORDER | Swt. Full_selection);
Table.setlayoutdata (New Griddata (Griddata.fill_both));
Table.setlinesvisible (TRUE);
Table.setheadervisible (TRUE);
TableColumn tcid = new TableColumn (table, SWT. left);
Tcid.settext ("ID");
TableColumn tcsummary = new TableColumn (table, SWT. NULL);
Tcsummary.settext ("Summary");
TableColumn tcassignedto = new TableColumn (table, SWT. NULL);
Tcassignedto.settext ("Assigned to");
TableColumn tcsolved = new TableColumn (table, SWT. NULL);
Tcsolved.settext ("solved");
Tcid.setwidth (60);
Tcsummary.setwidth (200);
Tcassignedto.setwidth (80);
Tcsolved.setwidth (50);
Table.pack ();
Final Tableeditor editor = new tableeditor (table);
Table.addlistener (SWT. MouseDown, New Listener () {
public void Handleevent (event event) {
Point point = new Point (Event.x, EVENT.Y);
Final Tableitem item = Table.getitem (point);
if (item = NULL)
Return
int column =-1;
for (int i = 0; i < Table.getcolumncount (); i++) {
Rectangle rect = item.getbounds (i);
if (Rect.contains (point))
column = i;
}
if (column!= 3)
Return
Final button button = New button (table, SWT. CHECK);
Button.setselection (Item.gettext (column). Equalsignorecase ("YES"));
Editor.horizontalalignment = SWT. Left;
Editor.grabhorizontal = true;
Editor.seteditor (button, item, column);
Final int selectedcolumn = column;
Listener Buttonlistener = new Listener () {
public void Handleevent (final Event e) {
Switch (e.type) {
Case SWT. Focusout:
Item.settext (
Selectedcolumn,
Button.getselection ()? "YES": "NO");
Button.dispose ();
Break
Case SWT. Traverse:
Switch (e.detail) {
Case SWT. Traverse_return:
Item.settext (
Selectedcolumn,
Button.getselection ()
? "YES"
: "NO");
Case SWT. Traverse_escape:
Button.dispose ();
E.doit = false;
}
Break
}
}
};
Button.addlistener (SWT. Focusout, Buttonlistener);
Button.addlistener (SWT. Traverse, Buttonlistener);
Button.setfocus ();
}
});
Table.addlistener (SWT. MouseDown, New Listener () {
public void Handleevent (event event) {
Point point = new Point (Event.x, EVENT.Y);
Final Tableitem item = Table.getitem (point);
if (item = NULL)
Return
int column =-1;
for (int i = 0; i < Table.getcolumncount (); i++) {
Rectangle rect = item.getbounds (i);
if (Rect.contains (point))
column = i;
}
if (Column < 0 | | | column >= 3)
Return
Final text = new text (table, SWT. NONE);
Text.settext (Item.gettext (column));
Editor.horizontalalignment = SWT. Left;
Editor.grabhorizontal = true;
Editor.seteditor (text, item, column);
Final int selectedcolumn = column;
Listener textlistener = new Listener () {
public void Handleevent (final Event e) {
Switch (e.type) {
Case SWT. Focusout:
Item.settext (Selectedcolumn, Text.gettext ());
Text.dispose ();
Break
Case SWT. Traverse:
Switch (e.detail) {
Case SWT. Traverse_return:
Item.settext (
Selectedcolumn,
Text.gettext ());
FALL through
Case SWT. Traverse_escape:
Text.dispose ();
E.doit = false;
}
Break
}
}
};
Text.addlistener (SWT. Focusout, TextListener);
Text.addlistener (SWT. Traverse, TextListener);
Text.setfocus ();
}
});
Loadbugs ();
Table.addlistener (SWT. Selection, New Listener () {
public void Handleevent (event event) {
System.out.println ("Selected:" + table.getselection () [0]);
}
});
Listener Sortlistener = new Listener () {
public void Handleevent (event event) {
if (! (Event.widget instanceof TableColumn))
Return
TableColumn TC = (tablecolumn) event.widget;
SortTable (table, Table.indexof (TC));
SYSTEM.OUT.PRINTLN ("The table is sorted by column #" + table.indexof (TC));
}
};
for (int i=0; I<table.getcolumncount (); i++)
((TableColumn) table.getcolumn (i)). AddListener (SWT. Selection, Sortlistener);
Shell.pack ();
Shell.open ();
while (!shell.isdisposed ()) {
if (!display.readanddispatch ()) {
Display.sleep ();
}
}
Display.dispose ();
}
public static void sorttable (table table, int columnindex) {
if (table = null | | table.getcolumncount () <= 1)
Return
if (ColumnIndex < 0 | | | columnindex >= table.getcolumncount ())
throw new IllegalArgumentException ("The specified column does not exist.");
Final int colindex = columnindex;
Comparator Comparator = new Comparator () {
public int Compare (object O1, Object O2) {
Return ((Tableitem) O1). GetText (Colindex). CompareTo ((Tableitem) O2). GetText (Colindex));
}
public boolean equals (Object obj) {
return false;
}
};
tableitem[] Tableitems = Table.getitems ();
Arrays.sort (Tableitems, comparator);
for (int i=0; i<tableitems.length; i++) {
Tableitem item = new Tableitem (table, SWT. NULL);
for (int j=0; J<table.getcolumncount (); j + +) {
Item.settext (J, Tableitems[i].gettext (j));
Item.setimage (J, Tableitems[i].getimage (j));
}
Tableitems[i].dispose ();
}
}
private void Savebugs () {
DataOutputStream out = null;
try {
File File = new file ("Bugs.dat");
out = new DataOutputStream (new FileOutputStream (file));
for (int i = 0; i < Table.getitemcount (); i++) {
Tableitem item = Table.getitem (i);
Out.writeutf (Item.gettext (0));
Out.writeutf (Item.gettext (1));
Out.writeutf (Item.gettext (2));
Out.writeboolean (Item.gettext (3). Equalsignorecase ("YES"));
}
catch (IOException IoE) {
finally {
try {
if (out!= null)
Out.close ();
catch (IOException e) {
E.printstacktrace ();
}
}
}
private void Loadbugs () {
DataInputStream in = null;
try {
File File = new file ("Bugs.dat");
if (!file.exists ())
Return
in = new DataInputStream (new FileInputStream (file));
while (true) {
String id = in.readutf ();
String summary = In.readutf ();
String AssignedTo = In.readutf ();
Boolean solved = In.readboolean ();
Tableitem item = new Tableitem (table, SWT. NULL);
Item.setimage (Bugicon);
Item.settext (
New string[] {
Id
Summary
AssignedTo,
Solved? "Yes": "No"});
}
catch (IOException IoE) {
finally {
try {
if (in!= null)
In.close ();
catch (IOException e) {
E.printstacktrace ();
}
}
}
public static void Main (string[] args) {
New BugTracker ();
}
}
Implementation 2:
Bugtrackerjface.java
Copy Code code as follows:
Package Swt_jface.demo6;
Import Java.io.DataInputStream;
Import Java.io.DataOutputStream;
Import Java.io.File;
Import Java.io.FileInputStream;
Import Java.io.FileOutputStream;
Import java.io.IOException;
Import Java.util.Vector;
Import org.eclipse.jface.action.Action;
Import Org.eclipse.jface.action.Separator;
Import Org.eclipse.jface.action.ToolBarManager;
Import Org.eclipse.jface.viewers.CellEditor;
Import Org.eclipse.jface.viewers.CheckboxCellEditor;
Import Org.eclipse.jface.viewers.ICellModifier;
Import Org.eclipse.jface.viewers.ILabelProviderListener;
Import Org.eclipse.jface.viewers.IStructuredContentProvider;
Import org.eclipse.jface.viewers.IStructuredSelection;
Import Org.eclipse.jface.viewers.ITableLabelProvider;
Import Org.eclipse.jface.viewers.TableViewer;
Import Org.eclipse.jface.viewers.TextCellEditor;
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.layout.GridData;
Import Org.eclipse.swt.layout.GridLayout;
Import Org.eclipse.swt.widgets.Display;
Import org.eclipse.swt.widgets.Event;
Import Org.eclipse.swt.widgets.Item;
Import Org.eclipse.swt.widgets.Listener;
Import Org.eclipse.swt.widgets.MessageBox;
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.ToolBar;
public class Bugtrackerjface {
public static class Bug {
public String ID;
Public String Summary;
Public String AssignedTo;
public Boolean issolved;
Public Bug (string ID, string summary, String AssignedTo, Boolean issolved) {
This.id = ID;
This.summary = Summary;
This.assignedto = AssignedTo;
this.issolved = issolved;
}
public static Vector loadbugs (file file) {
Vector v = new vector ();
DataInputStream in = null;
try {
if (!file.exists ()) return V;
in = new DataInputStream (new FileInputStream (file));
while (true) {
String id = in.readutf ();
String summary = In.readutf ();
String AssignedTo = In.readutf ();
Boolean solved = In.readboolean ();
V.add (new Bug (ID, summary, assignedto, solved));
}
catch (IOException IoE) {
finally {
try {
if (in!= null)
In.close ();
catch (IOException e) {
E.printstacktrace ();
}
}
return v;
}
}
Display display = new display ();
Shell shell = new shell (display);
Table table;
Tableviewer Tableviewer;
Vector Bugs;
Image Bugicon = new Image (Shell.getdisplay (), "c:/icons/bug.gif");
string[] colnames = new string[]{"ID", "Summary", "Assigned to", "solved"};
Class Bugsorter extends Viewersorter {
Private String property;
private int propertyindex;
Public Bugsorter (String sortbyproperty) {
for (int i=0; i<colnames.length; i++) {
if (Colnames[i].equals (Sortbyproperty)) {
This.property = Sortbyproperty;
This.propertyindex = i;
Return
}
}
throw new IllegalArgumentException ("Unrecognized property:" + Sortbyproperty);
}
public int Compare (Viewer Viewer, Object e1, object E2) {
Bug Bug1 = (bug) E1;
Bug Bug2 = (bug) E2;
Switch (propertyindex) {
Case 0:
Return Bug1.id.compareTo (bug2.id);
Case 1:
Return Bug1.summary.compareTo (bug2.summary);
Case 2:
Return Bug1.assignedTo.compareTo (bug2.assignedto);
Case 3:
if (bug1.issolved = = bug2.issolved)
return 0;
if (bug1.issolved)
return 1;
Else
return-1;
Default
return 0;
}
}
}
Public Bugtrackerjface () {
Action actionaddnew = new Action ("New Bug") {
public void Run () {
Append.
Bug bug = new Bug ("", "", "", false);
Bugs.add (bug);
Tableviewer.refresh (FALSE);
}
};
Action Actiondelete = new Action ("Delete selected") {
public void Run () {
Istructuredselection selection = (istructuredselection) tableviewer.getselection ();
Bug bug = (bug) selection.getfirstelement ();
if (bug = null) {
SYSTEM.OUT.PRINTLN ("Please select a item A.");
Return
}
MessageBox MessageBox = new MessageBox (Shell, SWT. YES | swt.no);
Messagebox.settext ("confirmation");
Messagebox.setmessage (
"Are you sure to remove the bug with ID #"
+ bug.id);
if (messagebox.open () = SWT. YES) {
Bugs.remove (bug);
Tableviewer.refresh (FALSE);
}
}
};
Action Actionsave = new Action ("Save") {
public void Run () {
Savebugs (bugs);
}
};
Final Viewerfilter filter = new Viewerfilter () {
public Boolean Select (
Viewer Viewer,
Object parentelement,
Object Element) {
if (! ((Bug) Element). issolved)
return true;
return false;
}
};
Action actionshowunsolvedonly = new Action ("Show unsolved only") {
public void Run () {
if (! ischecked ())
Tableviewer.removefilter (filter);
Else
Tableviewer.addfilter (filter);
}
};
Actionshowunsolvedonly.setchecked (FALSE);
ToolBar ToolBar = new ToolBar (Shell, SWT. Right | Swt. FLAT);
Toolbarmanager manager = new Toolbarmanager (ToolBar);
Manager.add (actionaddnew);
Manager.add (Actiondelete);
Manager.add (New Separator ());
Manager.add (Actionsave);
Manager.add (New Separator ());
Manager.add (actionshowunsolvedonly);
Manager.update (TRUE);
Shell.setlayout (New GridLayout ());
Table = new Table (Shell, SWT. BORDER | Swt. Full_selection);
TableColumn tcid = new TableColumn (table, SWT. left);
Tcid.settext (Colnames[0]);
TableColumn tcsummary = new TableColumn (table, SWT. NULL);
Tcsummary.settext (Colnames[1]);
TableColumn tcassignedto = new TableColumn (table, SWT. NULL);
Tcassignedto.settext (colnames[2]);
TableColumn tcsolved = new TableColumn (table, SWT. NULL);
Tcsolved.settext (Colnames[3]);
Tcid.setwidth (60);
Tcsummary.setwidth (200);
Tcassignedto.setwidth (80);
Tcsolved.setwidth (50);
Tableviewer = new tableviewer (table);
Tableviewer.gettable (). Setlinesvisible (True);
Tableviewer.gettable (). Setheadervisible (True);
Tableviewer.gettable (). Setlayoutdata (New Griddata (Griddata.fill_both));
Tableviewer.setcontentprovider (New Istructuredcontentprovider () {
Public object[] GetElements (Object inputelement) {
Vector v = (vector) inputelement;
return V.toarray ();
}
public void Dispose () {
System.out.println ("disposing ...");
}
public void inputchanged (
Viewer Viewer,
Object Oldinput,
Object newinput) {
System.out.println ("Input changed:old=" +
Oldinput + ", new=" + newinput);
}
});
Tableviewer.setlabelprovider (New Itablelabelprovider () {
Public Image Getcolumnimage (Object element, int columnindex) {
if (columnindex = 0)
return Bugicon;
return null;
}
Public String Getcolumntext (Object element, int columnindex) {
Bug bug = (bug) element;
Switch (columnindex) {
Case 0:
return bug.id;
Case 1:
return bug.summary;
Case 2:
return bug.assignedto;
Case 3:
Return bug.issolved? "YES": "NO";
}
return null;
}
public void AddListener (Ilabelproviderlistener listener) {
}
public void Dispose () {
}
public boolean Islabelproperty (Object element, String property) {
return false;
}
public void RemoveListener (Ilabelproviderlistener listener) {
}
});
Tableviewer.setcolumnproperties (colnames);
celleditor[] celleditors = new Celleditor[4];
Celleditors[0] = new textcelleditor (table);
CELLEDITORS[1] = celleditors[0];
CELLEDITORS[2] = celleditors[0];
CELLEDITORS[3] = new checkboxcelleditor (table);
Tableviewer.setcelleditors (celleditors);
Tableviewer.setcellmodifier (New Icellmodifier () {
public boolean canmodify (Object element, String property) {
return true;
}
public object GetValue (object element, String property) {
int index =-1;
for (int i=0; i<colnames.length; i++) {
if (Colnames[i].equals (property)) {
index = i;
Break
}
}
Bug bug = (bug) element;
Switch (index) {
Case 0:
return bug.id;
Case 1:
return bug.summary;
Case 2:
return bug.assignedto;
Case 3:
return new Boolean (bug.issolved);
}
return null;
}
public void Modify (object element, String, object value) {
System.out.println ("Modify:" + element + "," + Property + "," + value);
int index =-1;
for (int i=0; i<colnames.length; i++) {
if (Colnames[i].equals (property)) {
index = i;
Break
}
}
Bug bug = null;
if (element instanceof Item) {
Tableitem item = (tableitem) element;
Bug = (bug) item.getdata ();
}else{
Bug = (bug) element;
}
Switch (index) {
Case 0:
Bug.id = (String) value;
Break
Case 1:
Bug.summary = (String) value;
Break
Case 2:
Bug.assignedto = (String) value;
Break
Case 3:
bug.issolved = ((Boolean) value). Booleanvalue ();
Break
}
Tableviewer.update (bug, NULL);
}
});
Tcid.addlistener (SWT. Selection, New Listener () {
public void Handleevent (event event) {
Tableviewer.setsorter (New Bugsorter (colnames[0));
}
});
Tcsummary.addlistener (SWT. Selection, New Listener () {
public void Handleevent (event event) {
Tableviewer.setsorter (New Bugsorter (colnames[1));
}
});
Tcassignedto.addlistener (SWT. Selection, New Listener () {
public void Handleevent (event event) {
Tableviewer.setsorter (New Bugsorter (colnames[2));
}
});
Tcsolved.addlistener (SWT. Selection, New Listener () {
public void Handleevent (event event) {
Tableviewer.setsorter (New Bugsorter (colnames[3));
}
});
Bugs = bug.loadbugs (New File ("Bugs.dat"));
Tableviewer.setinput (bugs);
Shell.pack ();
Shell.open ();
while (!shell.isdisposed ()) {
if (!display.readanddispatch ()) {
Display.sleep ();
}
}
Display.dispose ();
}
private void Savebugs (Vector v) {
Save bugs to a file.
DataOutputStream out = null;
try {
File File = new file ("Bugs.dat");
out = new DataOutputStream (new FileOutputStream (file));
for (int i = 0; i < v.size (); i++) {
Bug bug = (bug) v.elementat (i);
Out.writeutf (bug.id);
Out.writeutf (bug.summary);
Out.writeutf (bug.assignedto);
Out.writeboolean (bug.issolved);
}
catch (IOException IoE) {
finally {
try {
if (out!= null)
Out.close ();
catch (IOException e) {
E.printstacktrace ();
}
}
}
public static void Main (string[] args) {
New Bugtrackerjface ();
}
}