Java tutorial
import java.util.LinkedList; import java.util.List; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.resource.ImageDescriptor; 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.jface.window.ApplicationWindow; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; 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.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; /** * This class displays an address book, using a wizard to add a new entry */ public class AddressBook extends ApplicationWindow { // The running instance of the application private static AddressBook APP; // The action that launches the wizard AddEntryAction addEntryAction; // The entries in the address book java.util.List entries; // The view private TableViewer viewer; /** * AddressBook constructor */ public AddressBook() { super(null); // Store a reference to the running app APP = this; // Create the action and the entries collection addEntryAction = new AddEntryAction(); entries = new LinkedList(); // Create the toolbar addToolBar(SWT.NONE); } /** * Gets a reference to the running application * * @return AddressBook */ public static AddressBook getApp() { return APP; } /** * Runs the application */ public void run() { // Don't return from open() until window closes setBlockOnOpen(true); // Open the main window open(); // Dispose the display Display.getCurrent().dispose(); } /** * Adds an entry * * @param entry * the entry */ public void add(AddressEntry entry) { entries.add(entry); refresh(); } /** * Configures the shell * * @param shell * the shell */ protected void configureShell(Shell shell) { super.configureShell(shell); // Set the title bar text shell.setText("Address Book"); shell.setSize(600, 400); } /** * Creates the main window's contents * * @param parent * the main window * @return Control */ protected Control createContents(Composite parent) { // Create the table viewer viewer = new TableViewer(parent); viewer.setContentProvider(new AddressBookContentProvider()); viewer.setLabelProvider(new AddressBookLabelProvider()); viewer.setInput(entries); // Set up the table Table table = viewer.getTable(); new TableColumn(table, SWT.LEFT).setText("First Name"); new TableColumn(table, SWT.LEFT).setText("Last Name"); new TableColumn(table, SWT.LEFT).setText("E-mail Address"); table.setHeaderVisible(true); table.setLinesVisible(true); // Update the column widths refresh(); return table; } /** * Creates the toolbar * * @param style * the toolbar style * @return ToolBarManager */ protected ToolBarManager createToolBarManager(int style) { ToolBarManager tbm = new ToolBarManager(style); // Add the action to launch the wizard tbm.add(addEntryAction); return tbm; } /** * Updates the column widths */ private void refresh() { viewer.refresh(); // Pack the columns Table table = viewer.getTable(); for (int i = 0, n = table.getColumnCount(); i < n; i++) { table.getColumn(i).pack(); } } /** * The application entry point * * @param args * the command line arguments */ public static void main(String[] args) { new AddressBook().run(); } } /** * This class contains an entry in the Address Book */ class AddressEntry { private String lastName; private String firstName; private String email; /** * Gets the e-mail * * @return String */ public String getEmail() { return email; } /** * Sets the e-mail * * @param email * The email to set. */ public void setEmail(String email) { this.email = email; } /** * Gets the first name * * @return String */ public String getFirstName() { return firstName; } /** * Sets the first name * * @param firstName * The firstName to set. */ public void setFirstName(String firstName) { this.firstName = firstName; } /** * Gets the last name * * @return String */ public String getLastName() { return lastName; } /** * Sets the last name * * @param lastName * The lastName to set. */ public void setLastName(String lastName) { this.lastName = lastName; } } /** * This class launches the add entry wizard */ class AddEntryAction extends Action { /** * AddEntryAction constructor */ public AddEntryAction() { super("Add Entry", ImageDescriptor.createFromFile(AddEntryAction.class, "/images/addEntry.gif")); setToolTipText("Add Entry"); } /** * Runs the action */ public void run() { WizardDialog dlg = new WizardDialog(AddressBook.getApp().getShell(), new AddEntryWizard()); dlg.open(); } } /** * This class represents the wizard for adding entries to the address book */ class AddEntryWizard extends Wizard { // The pages in the wizard private WelcomePage welcomePage; private NamePage namePage; private EmailPage emailPage; /** * AddEntryWizard constructor */ public AddEntryWizard() { // Create the pages welcomePage = new WelcomePage(); namePage = new NamePage(); emailPage = new EmailPage(); // Add the pages to the wizard addPage(welcomePage); addPage(namePage); addPage(emailPage); // Set the dialog window title setWindowTitle("Address Book Entry Wizard"); } /** * Called when user clicks Finish Creates the entry in the address book */ public boolean performFinish() { // Create the entry based on the inputs AddressEntry entry = new AddressEntry(); entry.setFirstName(namePage.getFirstName()); entry.setLastName(namePage.getLastName()); entry.setEmail(emailPage.getEmail()); AddressBook.getApp().add(entry); // Return true to exit wizard return true; } } /** * This page collects the e-mail address */ class EmailPage extends WizardPage { // The e-mail address private String email = ""; /** * EmailPage constructor */ public EmailPage() { super("E-mail", "E-mail Address", ImageDescriptor.createFromFile(EmailPage.class, "/images/email.gif")); setDescription("Enter the e-mail address"); // Page isn't complete until an e-mail address has been added setPageComplete(false); } /** * Creates the contents of the page * * @param parent * the parent composite */ public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(2, false)); // Create the label and text box to hold email address new Label(composite, SWT.LEFT).setText("E-mail Address:"); final Text ea = new Text(composite, SWT.BORDER); ea.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // Add handler to update e-mail based on input ea.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent event) { email = ea.getText(); setPageComplete(email.length() > 0); } }); setControl(composite); } /** * Gets the e-mail * * @return String */ public String getEmail() { return email; } } /** * This page displays a welcome message */ class WelcomePage extends WizardPage { /** * WelcomePage constructor */ protected WelcomePage() { super("Welcome", "Welcome", ImageDescriptor.createFromFile(WelcomePage.class, "/images/welcome.gif")); setDescription("Welcome to the Address Book Entry Wizard"); } /** * Creates the page contents * * @param parent * the parent composite */ public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new FillLayout(SWT.VERTICAL)); new Label(composite, SWT.CENTER).setText("Welcome to the Address Book Entry Wizard!"); new Label(composite, SWT.LEFT).setText("This wizard guides you through creating an Address Book entry."); new Label(composite, SWT.LEFT).setText("Click Next to continue."); setControl(composite); } } /** * This page collects the first and last names */ class NamePage extends WizardPage { // The first and last names private String firstName = ""; private String lastName = ""; /** * NamePage constructor */ public NamePage() { super("Name", "Name", ImageDescriptor.createFromFile(NamePage.class, "/images/name.gif")); setDescription("Enter the first and last names"); setPageComplete(false); } /** * Creates the page contents * * @param parent * the parent composite */ public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(2, false)); // Create the label and text field for first name new Label(composite, SWT.LEFT).setText("First Name:"); final Text first = new Text(composite, SWT.BORDER); first.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // Create the label and text field for last name new Label(composite, SWT.LEFT).setText("Last Name:"); final Text last = new Text(composite, SWT.BORDER); last.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // Add the handler to update the first name based on input first.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent event) { firstName = first.getText(); setPageComplete(firstName.length() > 0 && lastName.length() > 0); } }); // Add the handler to update the last name based on input last.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent event) { lastName = last.getText(); setPageComplete(firstName.length() > 0 && lastName.length() > 0); } }); setControl(composite); } /** * Gets the first name * * @return String */ public String getFirstName() { return firstName; } /** * Gets the last name * * @return String */ public String getLastName() { return lastName; } } /** * This class provides the content for the AddressBook application */ class AddressBookContentProvider implements IStructuredContentProvider { /** * Gets the elements * * @param inputElement * the List of elements * @return Object[] */ public Object[] getElements(Object inputElement) { return ((List) inputElement).toArray(); } /** * Disposes any resources */ public void dispose() { // Do nothing } /** * Called when the input changes * * @param viewer * the viewer * @param oldInput * the old input * @param newInput * the new input */ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // Do nothing } } /** * This class provides the labels for the Address Book application */ class AddressBookLabelProvider implements ITableLabelProvider { /** * Gets the image for the column * * @param element * the element * @param columnIndex * the column index */ public Image getColumnImage(Object element, int columnIndex) { return null; } /** * Gets the text for the column * * @param element * the element * @param columnIndex * the column index */ public String getColumnText(Object element, int columnIndex) { AddressEntry ae = (AddressEntry) element; switch (columnIndex) { case 0: return ae.getFirstName(); case 1: return ae.getLastName(); case 2: return ae.getEmail(); } return ""; } /** * Adds a listener * * @param listener * the listener */ public void addListener(ILabelProviderListener listener) { // Do nothing } /** * Disposes any resources */ public void dispose() { // Do nothing } /** * Returns true if changing the property for the element would change the * label * * @param element * the element * @param property * the property */ public boolean isLabelProperty(Object element, String property) { return false; } /** * Removes a listener * * @param listener * the listener */ public void removeListener(ILabelProviderListener listener) { // Do nothing } }