import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
public class SWTTextEditor {
Display d;
Shell s;
SWTTextEditor() {
d = new Display();
s = new Shell(d, SWT.CLOSE);
s.setSize(500, 500);
s.setText("SWT Text Editor");
final ToolBar bar = new ToolBar(s, SWT.HORIZONTAL);
final Text t = new Text(s, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL
| SWT.WRAP | SWT.BORDER);
// create images for toolbar buttons
final Image saveIcon = new Image(d, "save.jpg");
final Image openIcon = new Image(d, "open.jpg");
final Image childIcon = new Image(d, "userH.ico");
final Image cutIcon = new Image(d, "cut.jpg");
final Image copyIcon = new Image(d, "copy.jpg");
final Image pasteIcon = new Image(d, "paste.jpg");
//create ToolBar and ToolItems
final ToolItem openToolItem = new ToolItem(bar, SWT.PUSH);
final ToolItem saveToolItem = new ToolItem(bar, SWT.PUSH);
final ToolItem sep1 = new ToolItem(bar, SWT.SEPARATOR);
final ToolItem cutToolItem = new ToolItem(bar, SWT.PUSH);
final ToolItem copyToolItem = new ToolItem(bar, SWT.PUSH);
final ToolItem pasteToolItem = new ToolItem(bar, SWT.PUSH);
// create the menu system
final Menu m = new Menu(s, SWT.BAR);
final MenuItem file = new MenuItem(m, SWT.CASCADE);
final Menu filemenu = new Menu(s, SWT.DROP_DOWN);
final MenuItem openMenuItem = new MenuItem(filemenu, SWT.PUSH);
final MenuItem saveMenuItem = new MenuItem(filemenu, SWT.PUSH);
final MenuItem separator = new MenuItem(filemenu, SWT.SEPARATOR);
final MenuItem exitMenuItem = new MenuItem(filemenu, SWT.PUSH);
final MenuItem edit = new MenuItem(m, SWT.CASCADE);
final Menu editmenu = new Menu(s, SWT.DROP_DOWN);
final MenuItem cutMenuItem = new MenuItem(editmenu, SWT.PUSH);
final MenuItem copyMenuItem = new MenuItem(editmenu, SWT.PUSH);
final MenuItem pasteMenuItem = new MenuItem(editmenu, SWT.PUSH);
final MenuItem help = new MenuItem(m, SWT.CASCADE);
final Menu helpmenu = new Menu(s, SWT.DROP_DOWN);
final MenuItem aboutMenuItem = new MenuItem(helpmenu, SWT.PUSH);
//create reusable named inner classes for SelectionListeners
class Open extends SelectionAdapter {
public void widgetSelected(SelectionEvent event) {
FileDialog fileDialog = new FileDialog(s, SWT.OPEN);
fileDialog.setText("Open");
fileDialog.setFilterPath("C:/");
String[] filterExt = { "*.txt", "*.*" };
fileDialog.setFilterExtensions(filterExt);
String selected = fileDialog.open();
if (selected == null)
return;
// code here to open the file and display
FileReader file = null;
try {
file = new FileReader(selected);
} catch (FileNotFoundException e) {
MessageBox messageBox = new MessageBox(s, SWT.ICON_ERROR
| SWT.OK);
messageBox.setMessage("Could not open file.");
messageBox.setText("Error");
messageBox.open();
return;
}
BufferedReader fileInput = new BufferedReader(file);
String text = null;
StringBuffer sb = new StringBuffer();
try {
do {
if (text != null)
sb.append(text);
} while ((text = fileInput.readLine()) != null);
} catch (IOException e1) {
MessageBox messageBox = new MessageBox(s, SWT.ICON_ERROR
| SWT.OK);
messageBox.setMessage("Could not write to file.");
messageBox.setText("Error");
messageBox.open();
return;
}
t.setText(sb.toString());
}
}
class Save extends SelectionAdapter {
public void widgetSelected(SelectionEvent event) {
FileDialog fileDialog = new FileDialog(s, SWT.SAVE);
fileDialog.setText("Save");
fileDialog.setFilterPath("C:/");
String[] filterExt = { "*.txt", "*.*" };
fileDialog.setFilterExtensions(filterExt);
String selected = fileDialog.open();
if (selected == null)
return;
File file = new File(selected);
try {
FileWriter fileWriter = new FileWriter(file);
fileWriter.write(t.getText());
fileWriter.close();
} catch (IOException e) {
MessageBox messageBox = new MessageBox(s, SWT.ICON_ERROR
| SWT.OK);
messageBox.setMessage("File I/O Error.");
messageBox.setText("Error");
messageBox.open();
return;
}
}
}
class Cut extends SelectionAdapter {
public void widgetSelected(SelectionEvent event) {
t.cut();
}
}
class Copy extends SelectionAdapter {
public void widgetSelected(SelectionEvent event) {
t.copy();
}
}
class Paste extends SelectionAdapter {
public void widgetSelected(SelectionEvent event) {
t.paste();
}
}
//set the size and location of the user interface widgets
bar.setSize(500, 55);
bar.setLocation(10, 0);
t.setBounds(0, 56, 490, 395);
//Configure the ToolBar
openToolItem.setImage(openIcon);
openToolItem.setText("Open");
openToolItem.setToolTipText("Open File");
saveToolItem.setImage(saveIcon);
saveToolItem.setText("Save");
saveToolItem.setToolTipText("Save File");
cutToolItem.setImage(cutIcon);
cutToolItem.setText("Cut");
cutToolItem.setToolTipText("Cut");
copyToolItem.setImage(copyIcon);
copyToolItem.setText("Copy");
copyToolItem.setToolTipText("Copy");
pasteToolItem.setImage(pasteIcon);
pasteToolItem.setText("Paste");
pasteToolItem.setToolTipText("Paste");
//add SelectionListeners to the toolbar buttons
openToolItem.addSelectionListener(new Open());
saveToolItem.addSelectionListener(new Save());
cutToolItem.addSelectionListener(new Cut());
copyToolItem.addSelectionListener(new Copy());
pasteToolItem.addSelectionListener(new Paste());
//Configure the menu items
file.setText("&File");
file.setMenu(filemenu);
openMenuItem.setText("&Open\tCTRL+O");
openMenuItem.setAccelerator(SWT.CTRL + 'O');
saveMenuItem.setText("&Save\tCTRL+S");
saveMenuItem.setAccelerator(SWT.CTRL + 'S');
exitMenuItem.setText("E&xit");
edit.setText("&Edit");
edit.setMenu(editmenu);
cutMenuItem.setText("&Cut");
copyMenuItem.setText("Co&py");
pasteMenuItem.setText("&Paste");
help.setText("&Help");
help.setMenu(helpmenu);
aboutMenuItem.setText("&About");
// add SelectionListeners for the menu items
openMenuItem.addSelectionListener(new Open());
saveMenuItem.addSelectionListener(new Save());
exitMenuItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
System.exit(0);
}
});
cutMenuItem.addSelectionListener(new Cut());
copyMenuItem.addSelectionListener(new Copy());
pasteMenuItem.addSelectionListener(new Paste());
aboutMenuItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
AboutDialog ad = new AboutDialog(s);
ad.open();
}
});
s.setMenuBar(m);
s.open();
while (!s.isDisposed()) {
if (!d.readAndDispatch())
d.sleep();
}
d.dispose();
}
// include a main method to make the class executable
public static void main(String[] args) {
SWTTextEditor ste = new SWTTextEditor();
}
}
class AboutDialog extends Dialog {
AboutDialog(Shell parent) {
super(parent);
}
public void open() {
Shell parent = getParent();
final Shell dialog = new Shell(parent, SWT.DIALOG_TRIM
| SWT.APPLICATION_MODAL);
dialog.setSize(200, 100);
dialog.setText("About");
final Label l = new Label(dialog, SWT.NONE);
l.setText("An SWT Text Editor");
l.setBounds(43, 20, 100, 20);
Button b = new Button(dialog, SWT.PUSH | SWT.BORDER);
b.setText("OK");
b.setBounds(80, 45, 40, 25);
b.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
dialog.dispose();
}
});
dialog.open();
Display display = parent.getDisplay();
while (!dialog.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}