书签管理器 : 树 « 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 » 屏幕截图 
书签管理器
书签管理器


/*******************************************************************************
 * All Right Reserved. Copyright (c) 1998, 2004 Jackwind Li Guojie
 
 * Created on 2004-4-27 16:53:36 by JACK $Id$
 *  
 ******************************************************************************/



import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.ByteArrayTransfer;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.swt.dnd.DragSource;
import org.eclipse.swt.dnd.DragSourceAdapter;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.DropTargetAdapter;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;


/**
 * Represents a bookmark.
 *
 */
class Bookmark {
  public String name;
  public String href;
  public String addDate;
  public String lastVisited;
  public String lastModified;
}

public class BookmarkOrganizer {
  private static String folderLinePrefix = "<DT><H3 FOLDED";
  private static String urlLinePrefix = "<DT><A HREF";
  private static Pattern folderPattern = Pattern.compile("\"(\\d+)\">(.*)<");
  private static Pattern urlPattern =
    Pattern.compile("\"(.*)\".*\"(.*)\".*\"(.*)\".*\"(.*)\">(.*)<");

  private static String KEY_ADD_DATE = "ADD_DATE";
  private static String KEY_HREF = "HREF";
  private static String KEY_LAST_VISITED = "LAST_VISITED";
  private static String KEY_LAST_MODIFIED = "LAST_MODIFIED";

  Display display = new Display();
  Shell shell = new Shell(display);

  Tree tree;
  Label label;

  TreeItem rootItem;

  Image iconRoot = new Image(display, "java2s.gif");
  Image iconFolder = new Image(display, "java2s.gif");
  Image iconURL = new Image(display, "java2s.gif");

  TreeItem dragSourceItem;

  public BookmarkOrganizer() {
    shell.setText("Bookmark organizer");
    shell.setLayout(new GridLayout(1true));

    ToolBar toolBar = new ToolBar(shell, SWT.FLAT);
    ToolItem itemOpen = new ToolItem(toolBar, SWT.PUSH);
    itemOpen.setText("Load");
    itemOpen.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        FileDialog dialog = new FileDialog(shell, SWT.OPEN);
        String file = dialog.open();
        if (file != null) {
          // removes existing items.
          TreeItem[] items = rootItem.getItems();
          for (int i = 0; i < items.length; i++)
            items[i].dispose();

          loadBookmark(new File(file), rootItem);
          setStatus("Bookmarks loaded successfully");
        }
      }
    });

    ToolItem itemSave = new ToolItem(toolBar, SWT.PUSH);
    itemSave.setText("Save as");
    itemSave.addListener(SWT.Selection, new Listener() {
      public void handleEvent(Event event) {
        FileDialog dialog = new FileDialog(shell, SWT.SAVE);
        String file = dialog.open();
        if (file != null) {
          try {
            BufferedWriter writer =
              new BufferedWriter(new FileWriter(file));
            saveBookmark(writer, rootItem);
            writer.close();
            setStatus(
              "Bookmarks saved successfully to file: " + file);
          catch (IOException e) {
            e.printStackTrace();
          }
        }
      }
    });

    tree = new Tree(shell, SWT.BORDER);
    tree.setLayoutData(new GridData(GridData.FILL_BOTH));
    rootItem = new TreeItem(tree, SWT.NULL);
    rootItem.setText("BOOKMARKS");
    rootItem.setImage(iconRoot);

    label = new Label(shell, SWT.BORDER);
    label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    final DragSource dragSource =
      new DragSource(tree, DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK);
    dragSource.setTransfer(
      new Transfer[] { BookmarkTransfer.getInstance()});

    dragSource.addDragListener(new DragSourceAdapter() {
      public void dragStart(DragSourceEvent event) {
        TreeItem[] selection = tree.getSelection();
        // Only a URL bookmark can be dragged.
        if (selection.length > && selection[0].getData() != null) {
          event.doit = true;
          dragSourceItem = selection[0];
        else {
          event.doit = false;
        }
      };

      public void dragSetData(DragSourceEvent event) {
        if (BookmarkTransfer
          .getInstance()
          .isSupportedType(event.dataType))
          event.data = dragSourceItem.getData();
      }

      public void dragFinished(DragSourceEvent event) {
        if (event.detail == DND.DROP_MOVE)
          dragSourceItem.dispose();
        dragSourceItem = null;
      }

    });

    final DropTarget dropTarget =
      new DropTarget(tree, DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK);
    dropTarget.setTransfer(
      new Transfer[] { BookmarkTransfer.getInstance()});
    dropTarget.addDropListener(new DropTargetAdapter() {
      public void dragOver(DropTargetEvent event) {
        event.feedback =
          DND.FEEDBACK_EXPAND
            | DND.FEEDBACK_SCROLL
            | DND.FEEDBACK_SELECT;
      }

      public void dropAccept(DropTargetEvent event) {
        // can only drops into to a folder
        if (event.item == null
          || ((TreeItemevent.item).getData() != null)
          event.detail = DND.DROP_NONE;
      }

      public void drop(DropTargetEvent event) {
        try {
          if (event.data == null) {
            event.detail = DND.DROP_NONE;
            return;
          }

          TreeItem item =
            new TreeItem((TreeItemevent.item, SWT.NULL);
          Bookmark bookmark = (Bookmarkevent.data;
          item.setText(bookmark.name);
          item.setImage(iconURL);
          item.setData(bookmark);
        catch (RuntimeException e) {
          e.printStackTrace();
        }
      }
    });

    tree.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        TreeItem item = (TreeIteme.item;
        Bookmark bookmark = (Bookmarkitem.getData();
        if (bookmark != null) {
          setStatus(bookmark.href);
        else if (item.getData(KEY_ADD_DATE!= null) { // folder.
          setStatus("Folder: " + item.getText());
        }
      }
    });

    shell.setSize(400300);
    shell.open();
    //textUser.forceFocus();

    loadBookmark(new File("icons/mybookmark.htm"), rootItem);

    // Set up the event loop.
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        // If no more entries in event queue
        display.sleep();
      }
    }

    display.dispose();
  }

  /**
   * Writes the bookmark(s) into the given buffered writer. 
   @param writer
   @param item
   @throws IOException
   */
  private void saveBookmark(BufferedWriter writer, TreeItem item)
    throws IOException {
    if (item.getData() == null
      && item.getData(KEY_ADD_DATE== null) { // root item.
      writer.write(
        "<!DOCTYPE NETSCAPE-Bookmark-file-1>\n"
          "<!-- This is an automatically generated file.\n"
          "It will be read and overwritten.\n"
          "Do Not Edit! -->\n"
          "<TITLE>Bookmarks</TITLE>\n"
          "<H1>Bookmarks</H1>\n"
          "<DL><p>\n");

      TreeItem[] items = item.getItems();
      for (int i = 0; i < items.length; i++)
        saveBookmark(writer, items[i]);

      writer.write("</DL><p>\n");
    else if (item.getData() == null) { // folder
      writer.write(
        "\t<DT><H3 FOLDED ADD_DATE=\""
          + item.getData(KEY_ADD_DATE)
          "\">"
          + item.getText()
          "</H3>\n");
      writer.write("\t<DL><p>\n");

      TreeItem[] items = item.getItems();
      for (int i = 0; i < items.length; i++)
        saveBookmark(writer, items[i]);

      writer.write("\t</DL><p>\n");

    else // url.
      Bookmark bookmark = (Bookmarkitem.getData();
      writer.write(
        "\t\t<DT><A HREF=\""
          + bookmark.href
          "\" ADD_DATE=\""
          + bookmark.addDate
          "\" LAST_VISIT=\""
          + bookmark.lastVisited
          "\" LAST_MODIFIED=\" +"
          + bookmark.lastModified
          "\">"
          + bookmark.name
          "</A>\n");
    }
  }

  /**
   * Loads the bookmarks from the specified file. 
   @param file
   @param rootItem
   */
  private void loadBookmark(File file, TreeItem rootItem) {
    TreeItem parent = rootItem;

    try {
      BufferedReader reader = new BufferedReader(new FileReader(file));
      String line = null;
      while ((line = reader.readLine()) != null) {
        line = line.trim();
        if (line.startsWith(folderLinePrefix)) { // a folder.
          Matcher matcher = folderPattern.matcher(line);
          if (matcher.find()) {
            String addDate = matcher.group(1);
            String name = matcher.group(2);

            TreeItem item = new TreeItem(parent, SWT.NULL);
            item.setText(name);
            item.setData(KEY_ADD_DATE, addDate);
            item.setImage(iconFolder);
            parent = item;
          }
        else if (line.startsWith(urlLinePrefix)) { // a url
          Matcher matcher = urlPattern.matcher(line);
          if (matcher.find()) {
            Bookmark bookmark = new Bookmark();
            bookmark.href = matcher.group(1);
            bookmark.addDate = matcher.group(2);
            bookmark.lastVisited = matcher.group(3);
            bookmark.lastModified = matcher.group(4);
            bookmark.name = matcher.group(5);

            TreeItem item = new TreeItem(parent, SWT.NULL);
            item.setText(bookmark.name);
            item.setData(bookmark);
            item.setImage(iconURL);

          }
        else if (line.equals("</DL><p>")) { // folder boundry.
          parent = parent.getParentItem();
        }
      }
    catch (FileNotFoundException e) {
      e.printStackTrace();
    catch (IOException e) {
      e.printStackTrace();
    }
  }

  private void setStatus(String message) {
    label.setText(message);
  }

  public static void main(String[] args) {
    new BookmarkOrganizer();
  }
}

class BookmarkTransfer extends ByteArrayTransfer {
  private static final String BOOKMARK_TRANSFER_NAME = "BOOKMARK";
  private static final int BOOKMARK_TRANSFER_ID =
    registerType(BOOKMARK_TRANSFER_NAME);
  private static final BookmarkTransfer instance = new BookmarkTransfer();

  public static BookmarkTransfer getInstance() {
    return instance;
  }

  /*
   * (non-Javadoc)
   
   * @see org.eclipse.swt.dnd.Transfer#getTypeIds()
   */
  protected int[] getTypeIds() {
    return new int[] { BOOKMARK_TRANSFER_ID };
  }

  /*
   * (non-Javadoc)
   
   * @see org.eclipse.swt.dnd.Transfer#getTypeNames()
   */
  protected String[] getTypeNames() {
    return new String[] { BOOKMARK_TRANSFER_NAME };
  }

  /*
   * (non-Javadoc)
   
   * @see org.eclipse.swt.dnd.Transfer#javaToNative(java.lang.Object,
   *      org.eclipse.swt.dnd.TransferData)
   */
  protected void javaToNative(Object object, TransferData transferData) {
    if (object == null || !(object instanceof Bookmark))
      return;

    Bookmark bookmark = (Bookmarkobject;

    if (isSupportedType(transferData)) {
      try {
        // Writes data to a byte array.
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        DataOutputStream out = new DataOutputStream(stream);
        out.writeUTF(bookmark.name);
        out.writeUTF(bookmark.href);
        out.writeUTF(bookmark.addDate);
        out.writeUTF(bookmark.lastVisited);
        out.writeUTF(bookmark.lastModified);
        out.close();

        super.javaToNative(stream.toByteArray(), transferData);
      catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

  /*
   * (non-Javadoc)
   
   * @see org.eclipse.swt.dnd.Transfer#nativeToJava(org.eclipse.swt.dnd.TransferData)
   */
  protected Object nativeToJava(TransferData transferData) {
    if (isSupportedType(transferData)) {
      byte[] raw = (byte[]) super.nativeToJava(transferData);
      if (raw == null)
        return null;
      Bookmark bookmark = new Bookmark();

      try {
        ByteArrayInputStream stream = new ByteArrayInputStream(raw);
        DataInputStream in = new DataInputStream(stream);
        bookmark.name = in.readUTF();
        bookmark.href = in.readUTF();
        bookmark.addDate = in.readUTF();
        bookmark.lastVisited = in.readUTF();
        bookmark.lastModified = in.readUTF();
        in.close();
      catch (IOException e) {
        e.printStackTrace();
        return null;
      }

      return bookmark;
    else {
      return null;
    }
  }

}
           
       
Related examples in the same category
1. SWT多列树SWT多列树
2. 在SWT树控件检测鼠标在SWT树控件检测鼠标
3. 限制匹配的项目选择事件限制匹配的项目选择事件
4. SWT树简单演示SWT树简单演示
5. 分类树
6. 简单树简单树
7. Displays a single-selection tree, a multi-selection tree, and a checkbox treeDisplays a single-selection tree, a multi-selection tree, and a checkbox tree
8. 演示TableTree演示TableTree
9. 演示TreeEditor演示TreeEditor
10. 树实例树实例
11. 树示例2
12. 演示CheckboxTreeViewer
13. 演示TreeViewer演示TreeViewer
14. SWT Tree SWT Tree
15. SWT Tree Composite
16. 在一个SWT树打印选定的项目在一个SWT树打印选定的项目
17. 插入一个项目到SWT树(在索引位置)插入一个项目到SWT树(在索引位置)
18. 在树上检测选择事件( SWT.CHECK )在树上检测选择事件( SWT.CHECK )
19. 创建一个SWT树(懒惰)创建一个SWT树(懒惰)
20. 创建树创建树
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.