SWT JFace Bookmark 制作

页面导航:首页 > 软件编程 > Java编程 > SWT JFace Bookmark 制作

SWT JFace Bookmark 制作

来源:互联网 作者:脚本宝典 时间:2015-07-30 13:01 【

代码如下: BookmarkOrganizer.java 复制代码 代码如下: package swt_jface.demo11; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader;

代码如下: 
BookmarkOrganizer.java 

复制代码代码如下:


package swt_jface.demo11; 
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 org.eclipse.swt.SWT; 
import org.eclipse.swt.dnd.DND; 
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; 
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, "C:/icons/icon.gif"); 
    Image iconFolder = new Image(display, "C:/icons/folder.gif"); 
    Image iconURL = new Image(display, "C:/icons/file.gif"); 
    TreeItem dragSourceItem; 
    public BookmarkOrganizer() { 

        shell.setText("Bookmark organizer"); 
        shell.setLayout(new GridLayout(1, true)); 
        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) { 
                    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(); 
                if (selection.length > 0 && 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) { 
                if (event.item == null 
                    || ((TreeItem) event.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((TreeItem) event.item, SWT.NULL); 
                    Bookmark bookmark = (Bookmark) event.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 = (TreeItem) e.item; 
                Bookmark bookmark = (Bookmark) item.getData(); 
                if (bookmark != null) { 
                    setStatus(bookmark.href); 
                } else if (item.getData(KEY_ADD_DATE) != null) { 
                    setStatus("Folder: " + item.getText()); 
                } 
            } 
        }); 
        shell.setSize(400, 300); 
        shell.open(); 
        loadBookmark(new File("C:/icons/mybookmark.htm"), rootItem); 
        while (!shell.isDisposed()) { 
            if (!display.readAndDispatch()) { 
                display.sleep(); 
            } 
        } 
        display.dispose(); 
    } 
    private void saveBookmark(BufferedWriter writer, TreeItem item) 
        throws IOException { 
        if (item.getData() == null 
            && item.getData(KEY_ADD_DATE) == null) { 
            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) { 
            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 { 
            Bookmark bookmark = (Bookmark) item.getData(); 
            writer.write( 
                "\t\t<DT><A HREF="\" HREF="\""" 
                    + bookmark.href 
                    + "\" ADD_DATE=\"" 
                    + bookmark.addDate 
                    + "\" LAST_VISIT=\"" 
                    + bookmark.lastVisited 
                    + "\" LAST_MODIFIED=\" +" 
                    + bookmark.lastModified 
                    + "\">" 
                    + bookmark.name 
                    + "</A>\n"); 
        } 
    } 
    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)) { 
                    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)) { 
                    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(); 
    } 
}


BookmarkTransfer.java 

复制代码代码如下:


package swt_jface.demo11; 
import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import org.eclipse.swt.dnd.ByteArrayTransfer; 
import org.eclipse.swt.dnd.TransferData; 
public 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; 
    } 
    protected int[] getTypeIds() { 
        return new int[] { BOOKMARK_TRANSFER_ID }; 
    } 
    protected String[] getTypeNames() { 
        return new String[] { BOOKMARK_TRANSFER_NAME }; 
    } 
    protected void javaToNative(Object object, TransferData transferData) { 
        if (object == null || !(object instanceof Bookmark)) return; 
        Bookmark bookmark = (Bookmark) object; 
        if (isSupportedType(transferData)) { 
            try { 
                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(); 
            } 
        } 
    } 
    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; 
        } 
    } 
}


mybookmark.htm


Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<