Java tutorial
import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.List; import org.eclipse.swt.widgets.Shell; public class MailDialog extends TitleAreaDialog { // IDs for MailDialog buttons // We use large integers because we don't want // to conflict with system constants public static final int OPEN = 9999; public static final int DELETE = 9998; // List widget List list; // Initial content of the list String[] items; // Selected items String[] itemsToOpen; /** * Constructor for MailDialog. * * @param shell - * Containing shell * @param items - * Mail messages passed to the dialog */ public MailDialog(Shell shell, String[] items) { super(shell); this.items = items; } /** * @see org.eclipse.jface.window.Window#create() We complete the dialog with * a title and a message */ public void create() { super.create(); setTitle("Mail"); setMessage("You have mail! \n It could be vital for this evening..."); } /** * @see org.eclipse.jface.dialogs.Dialog# * createDialogArea(org.eclipse.swt.widgets.Composite) Here we fill the * center area of the dialog */ protected Control createDialogArea(Composite parent) { // Create new composite as container final Composite area = new Composite(parent, SWT.NULL); // We use a grid layout and set the size of the margins final GridLayout gridLayout = new GridLayout(); gridLayout.marginWidth = 15; gridLayout.marginHeight = 10; area.setLayout(gridLayout); // Now we create the list widget list = new List(area, SWT.BORDER | SWT.MULTI); // We define a minimum width for the list final GridData gridData = new GridData(); gridData.widthHint = 200; list.setLayoutData(gridData); // We add a SelectionListener list.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { // When the selection changes, we re-validate the list validate(); } }); // We add the initial mail messages to the list for (int i = 0; i < items.length; i++) { list.add(items[i]); } return area; } private void validate() { // We select the number of selected list entries boolean selected = (list.getSelectionCount() > 0); // We enable/disable the Open and Delete buttons getButton(OPEN).setEnabled(selected); getButton(DELETE).setEnabled(selected); if (!selected) // If nothing was selected, we set an error message setErrorMessage("Select at least one entry!"); else // Otherwise we set the error message to null // to show the intial content of the message area setErrorMessage(null); } /** * @see org.eclipse.jface.dialogs.Dialog# * createButtonsForButtonBar(org.eclipse.swt.widgets.Composite) We * replace the OK and Cancel buttons by our own creations We use the * method createButton() (from Dialog), to create the new buttons */ protected void createButtonsForButtonBar(Composite parent) { // Create Open button Button openButton = createButton(parent, OPEN, "Open", true); // Initially deactivate it openButton.setEnabled(false); // Add a SelectionListener openButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { // Retrieve selected entries from list itemsToOpen = list.getSelection(); // Set return code setReturnCode(OPEN); // Close dialog close(); } }); // Create Delete button Button deleteButton = createButton(parent, DELETE, "Delete", false); deleteButton.setEnabled(false); // Add a SelectionListener deleteButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { // Get the indices of the selected entries int selectedItems[] = list.getSelectionIndices(); // Remove all these entries list.remove(selectedItems); // Now re-validate the list because it has changed validate(); } }); // Create Cancel button Button cancelButton = createButton(parent, CANCEL, "Cancel", false); // Add a SelectionListener cancelButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { setReturnCode(CANCEL); close(); } }); } /** * Method getItemsToOpen. * * @return String[] - the selected items */ public String[] getItemsToOpen() { return itemsToOpen; } }