This application has save,load, sorting, and searching functions common to basic address books : 小应用程序 « SWT-JFace-Eclipse « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » SWT-JFace-Eclipse » 小应用程序屏幕截图 
This application has save,load, sorting, and searching functions common to basic address books
This application has save,load, sorting, and searching functions common to basic address books


/*******************************************************************************
 * Copyright (c) 2000, 2004 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
/* Imports */
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 java.util.Arrays;
import java.util.Comparator;
import java.util.ResourceBundle;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MenuAdapter;
import org.eclipse.swt.events.MenuEvent;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
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.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;

/**
 * AddressBookExample is an example that uses <code>org.eclipse.swt</code>
 * libraries to implement a simple address book. This application has save,
 * load, sorting, and searching functions common to basic address books.
 */
public class SWTAddressBook {

  

  private Shell shell;

  private Table table;

  private SearchDialog searchDialog;

  private File file;

  private boolean isModified;

  private String[] copyBuffer;

  private int lastSortColumn = -1;

  private static final String DELIMITER = "\t";

  private static final String[] columnNames = {
      "Last_name","First_name",
      "Business_phone","Home_phone",
      "Email""Fax" };

  public static void main(String[] args) {
    Display display = new Display();
    SWTAddressBook application = new SWTAddressBook();
    Shell shell = application.open(display);
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }

  public Shell open(Display display) {
    shell = new Shell(display);
    shell.setLayout(new FillLayout());
    shell.addShellListener(new ShellAdapter() {
      public void shellClosed(ShellEvent e) {
        e.doit = closeAddressBook();
      }
    });

    createMenuBar();

    searchDialog = new SearchDialog(shell);
    searchDialog.setSearchAreaNames(columnNames);
    searchDialog.setSearchAreaLabel("Column");
    searchDialog.addFindListener(new FindListener() {
      public boolean find() {
        return findEntry();
      }
    });

    table = new Table(shell, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION);
    table.setHeaderVisible(true);
    table.setMenu(createPopUpMenu());
    table.addSelectionListener(new SelectionAdapter() {
      public void widgetDefaultSelected(SelectionEvent e) {
        TableItem[] items = table.getSelection();
        if (items.length > 0)
          editEntry(items[0]);
      }
    });
    for (int i = 0; i < columnNames.length; i++) {
      TableColumn column = new TableColumn(table, SWT.NONE);
      column.setText(columnNames[i]);
      column.setWidth(150);
      final int columnIndex = i;
      column.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
          sort(columnIndex);
        }
      });
    }

    newAddressBook();

    shell.setSize(table.computeSize(SWT.DEFAULT, SWT.DEFAULT).x, 300);
    shell.open();
    return shell;
  }

  private boolean closeAddressBook() {
    if (isModified) {
      // ask user if they want to save current address book
      MessageBox box = new MessageBox(shell, SWT.ICON_WARNING | SWT.YES
          | SWT.NO | SWT.CANCEL);
      box.setText(shell.getText());
      box.setMessage("Close_save");

      int choice = box.open();
      if (choice == SWT.CANCEL) {
        return false;
      else if (choice == SWT.YES) {
        if (!save())
          return false;
      }
    }

    TableItem[] items = table.getItems();
    for (int i = 0; i < items.length; i++) {
      items[i].dispose();
    }

    return true;
  }

  /**
   * Creates the menu at the top of the shell where most of the programs
   * functionality is accessed.
   
   @return The <code>Menu</code> widget that was created
   */
  private Menu createMenuBar() {
    Menu menuBar = new Menu(shell, SWT.BAR);
    shell.setMenuBar(menuBar);

    // create each header and subMenu for the menuBar
    createFileMenu(menuBar);
    createEditMenu(menuBar);
    createSearchMenu(menuBar);
    createHelpMenu(menuBar);

    return menuBar;
  }

  /**
   * Converts an encoded <code>String</code> to a String array representing
   * a table entry.
   */
  private String[] decodeLine(String line) {
    if (line == null)
      return null;

    String[] parsedLine = new String[table.getColumnCount()];
    for (int i = 0; i < parsedLine.length - 1; i++) {
      int index = line.indexOf(DELIMITER);
      if (index > -1) {
        parsedLine[i= line.substring(0, index);
        line = line
            .substring(index + DELIMITER.length(), line.length());
      else {
        return null;
      }
    }

    if (line.indexOf(DELIMITER!= -1)
      return null;

    parsedLine[parsedLine.length - 1= line;

    return parsedLine;
  }

  private void displayError(String msg) {
    MessageBox box = new MessageBox(shell, SWT.ICON_ERROR);
    box.setMessage(msg);
    box.open();
  }

  private void editEntry(TableItem item) {
    DataEntryDialog dialog = new DataEntryDialog(shell);
    dialog.setLabels(columnNames);
    String[] values = new String[table.getColumnCount()];
    for (int i = 0; i < values.length; i++) {
      values[i= item.getText(i);
    }
    dialog.setValues(values);
    values = dialog.open();
    if (values != null) {
      item.setText(values);
      isModified = true;
    }
  }

  private String encodeLine(String[] tableItems) {
    String line = "";
    for (int i = 0; i < tableItems.length - 1; i++) {
      line += tableItems[i+ DELIMITER;
    }
    line += tableItems[tableItems.length - 1"\n";

    return line;
  }

  private boolean findEntry() {
    Cursor waitCursor = new Cursor(shell.getDisplay(), SWT.CURSOR_WAIT);
    shell.setCursor(waitCursor);

    boolean matchCase = searchDialog.getMatchCase();
    boolean matchWord = searchDialog.getMatchWord();
    String searchString = searchDialog.getSearchString();
    int column = searchDialog.getSelectedSearchArea();

    searchString = matchCase ? searchString : searchString.toLowerCase();

    boolean found = false;
    if (searchDialog.getSearchDown()) {
      for (int i = table.getSelectionIndex() 1; i < table
          .getItemCount(); i++) {
        if (found = findMatch(searchString, table.getItem(i), column,
            matchWord, matchCase)) {
          table.setSelection(i);
          break;
        }
      }
    else {
      for (int i = table.getSelectionIndex() 1; i > -1; i--) {
        if (found = findMatch(searchString, table.getItem(i), column,
            matchWord, matchCase)) {
          table.setSelection(i);
          break;
        }
      }
    }

    shell.setCursor(null);
    if (waitCursor != null)
      waitCursor.dispose();

    return found;
  }

  private boolean findMatch(String searchString, TableItem item, int column,
      boolean matchWord, boolean matchCase) {

    String tableText = matchCase ? item.getText(column: item.getText(
        column).toLowerCase();
    if (matchWord) {
      if (tableText != null && tableText.equals(searchString)) {
        return true;
      }

    else {
      if (tableText != null && tableText.indexOf(searchString!= -1) {
        return true;
      }
    }
    return false;
  }

  private void newAddressBook() {
    shell.setText("Title_bar"
        "New_title");
    file = null;
    isModified = false;
  }

  private void newEntry() {
    DataEntryDialog dialog = new DataEntryDialog(shell);
    dialog.setLabels(columnNames);
    String[] data = dialog.open();
    if (data != null) {
      TableItem item = new TableItem(table, SWT.NONE);
      item.setText(data);
      isModified = true;
    }
  }

  private void openAddressBook() {
    FileDialog fileDialog = new FileDialog(shell, SWT.OPEN);

    fileDialog.setFilterExtensions(new String[] { "*.adr;""*.*" });
    fileDialog.setFilterNames(new String[] {
        "Book_filter_name" " (*.adr)",
        "All_filter_name" " (*.*)" });
    String name = fileDialog.open();

    if (name == null)
      return;
    File file = new File(name);
    if (!file.exists()) {
      displayError("File" + file.getName()
          " " "Does_not_exist");
      return;
    }

    Cursor waitCursor = new Cursor(shell.getDisplay(), SWT.CURSOR_WAIT);
    shell.setCursor(waitCursor);

    FileReader fileReader = null;
    BufferedReader bufferedReader = null;
    String[] data = new String[0];
    try {
      fileReader = new FileReader(file.getAbsolutePath());
      bufferedReader = new BufferedReader(fileReader);
      String nextLine = bufferedReader.readLine();
      while (nextLine != null) {
        String[] newData = new String[data.length + 1];
        System.arraycopy(data, 0, newData, 0, data.length);
        newData[data.length= nextLine;
        data = newData;
        nextLine = bufferedReader.readLine();
      }
    catch (FileNotFoundException e) {
      displayError("File_not_found" "\n"
          + file.getName());
      return;
    catch (IOException e) {
      displayError("IO_error_read" "\n"
          + file.getName());
      return;
    finally {

      shell.setCursor(null);
      waitCursor.dispose();

      if (fileReader != null) {
        try {
          fileReader.close();
        catch (IOException e) {
          displayError("IO_error_close"
              "\n" + file.getName());
          return;
        }
      }
    }

    String[][] tableInfo = new String[data.length][table.getColumnCount()];
    int writeIndex = 0;
    for (int i = 0; i < data.length; i++) {
      String[] line = decodeLine(data[i]);
      if (line != null)
        tableInfo[writeIndex++= line;
    }
    if (writeIndex != data.length) {
      String[][] result = new String[writeIndex][table.getColumnCount()];
      System.arraycopy(tableInfo, 0, result, 0, writeIndex);
      tableInfo = result;
    }
    Arrays.sort(tableInfo, new RowComparator(0));

    for (int i = 0; i < tableInfo.length; i++) {
      TableItem item = new TableItem(table, SWT.NONE);
      item.setText(tableInfo[i]);
    }
    shell.setText("Title_bar"
        + fileDialog.getFileName());
    isModified = false;
    this.file = file;
  }

  private boolean save() {
    if (file == null)
      return saveAs();

    Cursor waitCursor = new Cursor(shell.getDisplay(), SWT.CURSOR_WAIT);
    shell.setCursor(waitCursor);

    TableItem[] items = table.getItems();
    String[] lines = new String[items.length];
    for (int i = 0; i < items.length; i++) {
      String[] itemText = new String[table.getColumnCount()];
      for (int j = 0; j < itemText.length; j++) {
        itemText[j= items[i].getText(j);
      }
      lines[i= encodeLine(itemText);
    }

    FileWriter fileWriter = null;
    try {
      fileWriter = new FileWriter(file.getAbsolutePath()false);
      for (int i = 0; i < lines.length; i++) {
        fileWriter.write(lines[i]);
      }
    catch (FileNotFoundException e) {
      displayError("File_not_found" "\n"
          + file.getName());
      return false;
    catch (IOException e) {
      displayError("IO_error_write" "\n"
          + file.getName());
      return false;
    finally {
      shell.setCursor(null);
      waitCursor.dispose();

      if (fileWriter != null) {
        try {
          fileWriter.close();
        catch (IOException e) {
          displayError("IO_error_close"
              "\n" + file.getName());
          return false;
        }
      }
    }

    shell.setText("Title_bar" + file.getName());
    isModified = false;
    return true;
  }

  private boolean saveAs() {

    FileDialog saveDialog = new FileDialog(shell, SWT.SAVE);
    saveDialog.setFilterExtensions(new String[] { "*.adr;""*.*" });
    saveDialog.setFilterNames(new String[] { "Address Books (*.adr)",
        "All Files " });

    saveDialog.open();
    String name = saveDialog.getFileName();

    if (name.equals(""))
      return false;

    if (name.indexOf(".adr"!= name.length() 4) {
      name += ".adr";
    }

    File file = new File(saveDialog.getFilterPath(), name);
    if (file.exists()) {
      MessageBox box = new MessageBox(shell, SWT.ICON_WARNING | SWT.YES
          | SWT.NO);
      box.setText("Save_as_title");
      box.setMessage("File" + file.getName()
          " " "Query_overwrite");
      if (box.open() != SWT.YES) {
        return false;
      }
    }
    this.file = file;
    return save();
  }

  private void sort(int column) {
    if (table.getItemCount() <= 1)
      return;

    TableItem[] items = table.getItems();
    String[][] data = new String[items.length][table.getColumnCount()];
    for (int i = 0; i < items.length; i++) {
      for (int j = 0; j < table.getColumnCount(); j++) {
        data[i][j= items[i].getText(j);
      }
    }

    Arrays.sort(data, new RowComparator(column));

    if (lastSortColumn != column) {
      for (int i = 0; i < data.length; i++) {
        items[i].setText(data[i]);
      }
      lastSortColumn = column;
    else {
      // reverse order if the current column is selected again
      int j = data.length - 1;
      for (int i = 0; i < data.length; i++) {
        items[i].setText(data[j--]);
      }
      lastSortColumn = -1;
    }

  }

  /**
   * Creates all the items located in the File submenu and associate all the
   * menu items with their appropriate functions.
   
   @param menuBar
   *            Menu the <code>Menu</code> that file contain the File
   *            submenu.
   */
  private void createFileMenu(Menu menuBar) {
    // File menu.
    MenuItem item = new MenuItem(menuBar, SWT.CASCADE);
    item.setText("File_menu_title");
    Menu menu = new Menu(shell, SWT.DROP_DOWN);
    item.setMenu(menu);
    /**
     * Adds a listener to handle enabling and disabling some items in the
     * Edit submenu.
     */
    menu.addMenuListener(new MenuAdapter() {
      public void menuShown(MenuEvent e) {
        Menu menu = (Menue.widget;
        MenuItem[] items = menu.getItems();
        items[1].setEnabled(table.getSelectionCount() != 0)// edit
                                    // contact
        items[5].setEnabled((file != null&& isModified)// save
        items[6].setEnabled(table.getItemCount() != 0)// save as
      }
    });

    // File -> New Contact
    MenuItem subItem = new MenuItem(menu, SWT.NULL);
    subItem.setText("New_contact");
    subItem.setAccelerator(SWT.MOD1 + 'N');
    subItem.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        newEntry();
      }
    });
    subItem = new MenuItem(menu, SWT.NULL);
    subItem.setText("Edit_contact");
    subItem.setAccelerator(SWT.MOD1 + 'E');
    subItem.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        TableItem[] items = table.getSelection();
        if (items.length == 0)
          return;
        editEntry(items[0]);
      }
    });

    new MenuItem(menu, SWT.SEPARATOR);

    // File -> New Address Book
    subItem = new MenuItem(menu, SWT.NULL);
    subItem.setText("New_address_book");
    subItem.setAccelerator(SWT.MOD1 + 'B');
    subItem.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        if (closeAddressBook()) {
          newAddressBook();
        }
      }
    });

    // File -> Open
    subItem = new MenuItem(menu, SWT.NULL);
    subItem.setText("Open_address_book");
    subItem.setAccelerator(SWT.MOD1 + 'O');
    subItem.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        if (closeAddressBook()) {
          openAddressBook();
        }
      }
    });

    // File -> Save.
    subItem = new MenuItem(menu, SWT.NULL);
    subItem.setText("Save_address_book");
    subItem.setAccelerator(SWT.MOD1 + 'S');
    subItem.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        save();
      }
    });

    // File -> Save As.
    subItem = new MenuItem(menu, SWT.NULL);
    subItem.setText("Save_book_as");
    subItem.setAccelerator(SWT.MOD1 + 'A');
    subItem.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        saveAs();
      }
    });

    new MenuItem(menu, SWT.SEPARATOR);

    // File -> Exit.
    subItem = new MenuItem(menu, SWT.NULL);
    subItem.setText("Exit");
    subItem.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        shell.close();
      }
    });
  }

  /**
   * Creates all the items located in the Edit submenu and associate all the
   * menu items with their appropriate functions.
   
   @param menuBar
   *            Menu the <code>Menu</code> that file contain the Edit
   *            submenu.
   
   @see #createSortMenu()
   */
  private MenuItem createEditMenu(Menu menuBar) {
    // Edit menu.
    MenuItem item = new MenuItem(menuBar, SWT.CASCADE);
    item.setText("Edit_menu_title");
    Menu menu = new Menu(shell, SWT.DROP_DOWN);
    item.setMenu(menu);

    /**
     * Add a listener to handle enabling and disabling some items in the
     * Edit submenu.
     */
    menu.addMenuListener(new MenuAdapter() {
      public void menuShown(MenuEvent e) {
        Menu menu = (Menue.widget;
        MenuItem[] items = menu.getItems();
        int count = table.getSelectionCount();
        items[0].setEnabled(count != 0)// edit
        items[1].setEnabled(count != 0)// copy
        items[2].setEnabled(copyBuffer != null)// paste
        items[3].setEnabled(count != 0)// delete
        items[5].setEnabled(table.getItemCount() != 0)// sort
      }
    });

    // Edit -> Edit
    MenuItem subItem = new MenuItem(menu, SWT.CASCADE);
    subItem.setText("Edit");
    subItem.setAccelerator(SWT.MOD1 + 'E');
    subItem.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        TableItem[] items = table.getSelection();
        if (items.length == 0)
          return;
        editEntry(items[0]);
      }
    });

    // Edit -> Copy
    subItem = new MenuItem(menu, SWT.NULL);
    subItem.setText("Copy");
    subItem.setAccelerator(SWT.MOD1 + 'C');
    subItem.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        TableItem[] items = table.getSelection();
        if (items.length == 0)
          return;
        copyBuffer = new String[table.getColumnCount()];
        for (int i = 0; i < copyBuffer.length; i++) {
          copyBuffer[i= items[0].getText(i);
        }
      }
    });

    // Edit -> Paste
    subItem = new MenuItem(menu, SWT.NULL);
    subItem.setText("Paste");
    subItem.setAccelerator(SWT.MOD1 + 'V');
    subItem.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        if (copyBuffer == null)
          return;
        TableItem item = new TableItem(table, SWT.NONE);
        item.setText(copyBuffer);
        isModified = true;
      }
    });

    // Edit -> Delete
    subItem = new MenuItem(menu, SWT.NULL);
    subItem.setText("Delete");
    subItem.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        TableItem[] items = table.getSelection();
        if (items.length == 0)
          return;
        items[0].dispose();
        isModified = true;
      }
    });

    new MenuItem(menu, SWT.SEPARATOR);

    // Edit -> Sort(Cascade)
    subItem = new MenuItem(menu, SWT.CASCADE);
    subItem.setText("Sort");
    Menu submenu = createSortMenu();
    subItem.setMenu(submenu);

    return item;

  }

  /**
   * Creates all the items located in the Sort cascading submenu and associate
   * all the menu items with their appropriate functions.
   
   @return Menu The cascading menu with all the sort menu items on it.
   */
  private Menu createSortMenu() {
    Menu submenu = new Menu(shell, SWT.DROP_DOWN);
    MenuItem subitem;
    for (int i = 0; i < columnNames.length; i++) {
      subitem = new MenuItem(submenu, SWT.NULL);
      subitem.setText(columnNames[i]);
      final int column = i;
      subitem.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
          sort(column);
        }
      });

    }

    return submenu;
  }

  /**
   * Creates all the items located in the Search submenu and associate all the
   * menu items with their appropriate functions.
   
   @param menuBar
   *            Menu the <code>Menu</code> that file contain the Search
   *            submenu.
   */
  private void createSearchMenu(Menu menuBar) {
    // Search menu.
    MenuItem item = new MenuItem(menuBar, SWT.CASCADE);
    item.setText("Search_menu_title");
    Menu searchMenu = new Menu(shell, SWT.DROP_DOWN);
    item.setMenu(searchMenu);

    // Search -> Find...
    item = new MenuItem(searchMenu, SWT.NULL);
    item.setText("Find");
    item.setAccelerator(SWT.MOD1 + 'F');
    item.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        searchDialog.setMatchCase(false);
        searchDialog.setMatchWord(false);
        searchDialog.setSearchDown(true);
        searchDialog.setSearchString("");
        searchDialog.setSelectedSearchArea(0);
        searchDialog.open();
      }
    });

    // Search -> Find Next
    item = new MenuItem(searchMenu, SWT.NULL);
    item.setText("Find_next");
    item.setAccelerator(SWT.F3);
    item.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        searchDialog.open();
      }
    });
  }

  /**
   * Creates all items located in the popup menu and associates all the menu
   * items with their appropriate functions.
   
   @return Menu The created popup menu.
   */
  private Menu createPopUpMenu() {
    Menu popUpMenu = new Menu(shell, SWT.POP_UP);

    /**
     * Adds a listener to handle enabling and disabling some items in the
     * Edit submenu.
     */
    popUpMenu.addMenuListener(new MenuAdapter() {
      public void menuShown(MenuEvent e) {
        Menu menu = (Menue.widget;
        MenuItem[] items = menu.getItems();
        int count = table.getSelectionCount();
        items[2].setEnabled(count != 0)// edit
        items[3].setEnabled(count != 0)// copy
        items[4].setEnabled(copyBuffer != null)// paste
        items[5].setEnabled(count != 0)// delete
        items[7].setEnabled(table.getItemCount() != 0)// find
      }
    });

    // New
    MenuItem item = new MenuItem(popUpMenu, SWT.CASCADE);
    item.setText("Pop_up_new");
    item.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        newEntry();
      }
    });

    new MenuItem(popUpMenu, SWT.SEPARATOR);

    // Edit
    item = new MenuItem(popUpMenu, SWT.CASCADE);
    item.setText("Pop_up_edit");
    item.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        TableItem[] items = table.getSelection();
        if (items.length == 0)
          return;
        editEntry(items[0]);
      }
    });

    // Copy
    item = new MenuItem(popUpMenu, SWT.CASCADE);
    item.setText("Pop_up_copy");
    item.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        TableItem[] items = table.getSelection();
        if (items.length == 0)
          return;
        copyBuffer = new String[table.getColumnCount()];
        for (int i = 0; i < copyBuffer.length; i++) {
          copyBuffer[i= items[0].getText(i);
        }
      }
    });

    // Paste
    item = new MenuItem(popUpMenu, SWT.CASCADE);
    item.setText("Pop_up_paste");
    item.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        if (copyBuffer == null)
          return;
        TableItem item = new TableItem(table, SWT.NONE);
        item.setText(copyBuffer);
        isModified = true;
      }
    });

    // Delete
    item = new MenuItem(popUpMenu, SWT.CASCADE);
    item.setText("Pop_up_delete");
    item.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        TableItem[] items = table.getSelection();
        if (items.length == 0)
          return;
        items[0].dispose();
        isModified = true;
      }
    });

    new MenuItem(popUpMenu, SWT.SEPARATOR);

    // Find...
    item = new MenuItem(popUpMenu, SWT.NULL);
    item.setText("Pop_up_find");
    item.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        searchDialog.open();
      }
    });

    return popUpMenu;
  }

  /**
   * Creates all the items located in the Help submenu and associate all the
   * menu items with their appropriate functions.
   
   @param menuBar
   *            Menu the <code>Menu</code> that file contain the Help
   *            submenu.
   */
  private void createHelpMenu(Menu menuBar) {

    // Help Menu
    MenuItem item = new MenuItem(menuBar, SWT.CASCADE);
    item.setText("Help_menu_title");
    Menu menu = new Menu(shell, SWT.DROP_DOWN);
    item.setMenu(menu);

    // Help -> About Text Editor
    MenuItem subItem = new MenuItem(menu, SWT.NULL);
    subItem.setText("About");
    subItem.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        MessageBox box = new MessageBox(shell, SWT.NONE);
        box.setText("About_1"
            + shell.getText());
        box.setMessage(shell.getText()
            "About_2");
        box.open();
      }
    });
  }

  /**
   * To compare entries (rows) by the given column
   */
  private class RowComparator implements Comparator {
    private int column;

    /**
     * Constructs a RowComparator given the column index
     
     @param col
     *            The index (starting at zero) of the column
     */
    public RowComparator(int col) {
      column = col;
    }

    /**
     * Compares two rows (type String[]) using the specified column entry.
     
     @param obj1
     *            First row to compare
     @param obj2
     *            Second row to compare
     @return negative if obj1 less than obj2, positive if obj1 greater
     *         than obj2, and zero if equal.
     */
    public int compare(Object obj1, Object obj2) {
      String[] row1 = (String[]) obj1;
      String[] row2 = (String[]) obj2;

      return row1[column].compareTo(row2[column]);
    }
  }
}

/*******************************************************************************
 * Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 
 * Contributors: IBM Corporation - initial API and implementation
 ******************************************************************************/
/**
 * SearchDialog is a simple class that uses <code>org.eclipse.swt</code>
 * libraries to implement a basic search dialog.
 */
class SearchDialog {

  Shell shell;

  Text searchText;

  Combo searchArea;

  Label searchAreaLabel;

  Button matchCase;

  Button matchWord;

  Button findButton;

  Button down;

  FindListener findHandler;

  /**
   * Class constructor that sets the parent shell and the table widget that
   * the dialog will search.
   
   @param parent
   *            Shell The shell that is the parent of the dialog.
   */
  public SearchDialog(Shell parent) {
    shell = new Shell(parent, SWT.CLOSE | SWT.BORDER | SWT.TITLE);
    GridLayout layout = new GridLayout();
    layout.numColumns = 2;
    shell.setLayout(layout);
    shell.setText("Search");
    shell.addShellListener(new ShellAdapter() {
      public void shellClosed(ShellEvent e) {
        // don't dispose of the shell, just hide it for later use
        e.doit = false;
        shell.setVisible(false);
      }
    });

    Label label = new Label(shell, SWT.LEFT);
    label.setText("Dialog_find_what");
    searchText = new Text(shell, SWT.BORDER);
    GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
    gridData.widthHint = 200;
    searchText.setLayoutData(gridData);
    searchText.addModifyListener(new ModifyListener() {
      public void modifyText(ModifyEvent e) {
        boolean enableFind = (searchText.getCharCount() != 0);
        findButton.setEnabled(enableFind);
      }
    });

    searchAreaLabel = new Label(shell, SWT.LEFT);
    searchArea = new Combo(shell, SWT.DROP_DOWN | SWT.READ_ONLY);
    gridData = new GridData(GridData.FILL_HORIZONTAL);
    gridData.widthHint = 200;
    searchArea.setLayoutData(gridData);

    matchCase = new Button(shell, SWT.CHECK);
    matchCase.setText("Dialog_match_case");
    gridData = new GridData();
    gridData.horizontalSpan = 2;
    matchCase.setLayoutData(gridData);

    matchWord = new Button(shell, SWT.CHECK);
    matchWord.setText("Dialog_match_word");
    gridData = new GridData();
    gridData.horizontalSpan = 2;
    matchWord.setLayoutData(gridData);

    Group direction = new Group(shell, SWT.NONE);
    gridData = new GridData();
    gridData.horizontalSpan = 2;
    direction.setLayoutData(gridData);
    direction.setLayout(new FillLayout());
    direction.setText("Dialog_direction");

    Button up = new Button(direction, SWT.RADIO);
    up.setText("Dialog_dir_up");
    up.setSelection(false);

    down = new Button(direction, SWT.RADIO);
    down.setText("Dialog_dir_down");
    down.setSelection(true);

    Composite composite = new Composite(shell, SWT.NONE);
    gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
    gridData.horizontalSpan = 2;
    composite.setLayoutData(gridData);
    layout = new GridLayout();
    layout.numColumns = 2;
    layout.makeColumnsEqualWidth = true;
    composite.setLayout(layout);

    findButton = new Button(composite, SWT.PUSH);
    findButton.setText("Dialog_find");
    findButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
    findButton.setEnabled(false);
    findButton.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        if (!findHandler.find()) {
          MessageBox box = new MessageBox(shell, SWT.ICON_INFORMATION
              | SWT.OK | SWT.PRIMARY_MODAL);
          box.setText(shell.getText());
          box.setMessage("Cannot_find"
              "\"" + searchText.getText() "\"");
          box.open();
        }
      }
    });

    Button cancelButton = new Button(composite, SWT.PUSH);
    cancelButton.setText("Cancel");
    cancelButton.setLayoutData(new GridData(
        GridData.HORIZONTAL_ALIGN_BEGINNING));
    cancelButton.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        shell.setVisible(false);
      }
    });

    shell.pack();
  }

  public String getSearchAreaLabel(String label) {
    return searchAreaLabel.getText();
  }

  public String[] getsearchAreaNames() {
    return searchArea.getItems();
  }

  public boolean getMatchCase() {
    return matchCase.getSelection();
  }

  public boolean getMatchWord() {
    return matchWord.getSelection();
  }

  public String getSearchString() {
    return searchText.getText();
  }

  public boolean getSearchDown() {
    return down.getSelection();
  }

  public int getSelectedSearchArea() {
    return searchArea.getSelectionIndex();
  }

  public void open() {
    if (shell.isVisible()) {
      shell.setFocus();
    else {
      shell.open();
    }
    searchText.setFocus();
  }

  public void setSearchAreaNames(String[] names) {
    for (int i = 0; i < names.length; i++) {
      searchArea.add(names[i]);
    }
    searchArea.select(0);
  }

  public void setSearchAreaLabel(String label) {
    searchAreaLabel.setText(label);
  }

  public void setMatchCase(boolean match) {
    matchCase.setSelection(match);
  }

  public void setMatchWord(boolean match) {
    matchWord.setSelection(match);
  }

  public void setSearchDown(boolean searchDown) {
    down.setSelection(searchDown);
  }

  public void setSearchString(String searchString) {
    searchText.setText(searchString);
  }

  public void setSelectedSearchArea(int index) {
    searchArea.select(index);
  }

  public void addFindListener(FindListener listener) {
    this.findHandler = listener;
  }

  public void removeFindListener(FindListener listener) {
    this.findHandler = null;
  }
}

/*******************************************************************************
 * Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 
 * Contributors: IBM Corporation - initial API and implementation
 ******************************************************************************/
interface FindListener {

  public boolean find();

}

/*******************************************************************************
 * Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 
 * Contributors: IBM Corporation - initial API and implementation
 ******************************************************************************/
/**
 * DataEntryDialog class uses <code>org.eclipse.swt</code> libraries to
 * implement a dialog that accepts basic personal information that is added to a
 * <code>Table</code> widget or edits a <code>TableItem</code> entry to
 * represent the entered data.
 */
class DataEntryDialog {

  Shell shell;

  String[] values;

  String[] labels;

  public DataEntryDialog(Shell parent) {
    shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.PRIMARY_MODAL);
    shell.setLayout(new GridLayout());
  }

  private void addTextListener(final Text text) {
    text.addModifyListener(new ModifyListener() {
      public void modifyText(ModifyEvent e) {
        Integer index = (Integer) (text.getData("index"));
        values[index.intValue()] = text.getText();
      }
    });
  }

  private void createControlButtons() {
    Composite composite = new Composite(shell, SWT.NULL);
    composite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER));
    GridLayout layout = new GridLayout();
    layout.numColumns = 2;
    composite.setLayout(layout);

    Button okButton = new Button(composite, SWT.PUSH);
    okButton.setText("OK");
    okButton.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        shell.close();
      }
    });

    Button cancelButton = new Button(composite, SWT.PUSH);
    cancelButton.setText("Cancel");
    cancelButton.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        values = null;
        shell.close();
      }
    });

    shell.setDefaultButton(okButton);
  }

  private void createTextWidgets() {
    if (labels == null)
      return;

    Composite composite = new Composite(shell, SWT.NULL);
    composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    GridLayout layout = new GridLayout();
    layout.numColumns = 2;
    composite.setLayout(layout);

    if (values == null)
      values = new String[labels.length];

    for (int i = 0; i < labels.length; i++) {
      Label label = new Label(composite, SWT.RIGHT);
      label.setText(labels[i]);
      Text text = new Text(composite, SWT.BORDER);
      GridData gridData = new GridData();
      gridData.widthHint = 400;
      text.setLayoutData(gridData);
      if (values[i!= null) {
        text.setText(values[i]);
      }
      text.setData("index"new Integer(i));
      addTextListener(text);
    }
  }

  public String[] getLabels() {
    return labels;
  }

  public String getTitle() {
    return shell.getText();
  }

  /**
   * Returns the contents of the <code>Text</code> widgets in the dialog in
   * a <code>String</code> array.
   
   @return String[] The contents of the text widgets of the dialog. May
   *         return null if all text widgets are empty.
   */
  public String[] getValues() {
    return values;
  }

  /**
   * Opens the dialog in the given state. Sets <code>Text</code> widget
   * contents and dialog behaviour accordingly.
   
   @param dialogState
   *            int The state the dialog should be opened in.
   */
  public String[] open() {
    createTextWidgets();
    createControlButtons();
    shell.pack();
    shell.open();
    Display display = shell.getDisplay();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }

    return getValues();
  }

  public void setLabels(String[] labels) {
    this.labels = labels;
  }

  public void setTitle(String title) {
    shell.setText(title);
  }

  /**
   * Sets the values of the <code>Text</code> widgets of the dialog to the
   * values supplied in the parameter array.
   
   @param itemInfo
   *            String[] The values to which the dialog contents will be set.
   */
  public void setValues(String[] itemInfo) {
    if (labels == null)
      return;

    if (values == null)
      values = new String[labels.length];

    int numItems = Math.min(values.length, itemInfo.length);
    for (int i = 0; i < numItems; i++) {
      values[i= itemInfo[i];
    }
  }
}


           
       
Related examples in the same category
1. SWT所有控件SWT所有控件
2. SWT文本编辑器
3. 小应用程序:图书馆
4. FTP客户端
5. SWT通讯录演示SWT通讯录演示
6. SWT形状
7. 窗口部件测试2窗口部件测试2
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.