zl程序教程

您现在的位置是:首页 >  其它

当前栏目

SWTJFaceBookmark制作

制作
2023-06-13 09:14:10 时间
代码如下:
BookmarkOrganizer.java
复制代码代码如下:

packageswt_jface.demo11;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileReader;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
importorg.eclipse.swt.SWT;
importorg.eclipse.swt.dnd.DND;
importorg.eclipse.swt.dnd.DragSource;
importorg.eclipse.swt.dnd.DragSourceAdapter;
importorg.eclipse.swt.dnd.DragSourceEvent;
importorg.eclipse.swt.dnd.DropTarget;
importorg.eclipse.swt.dnd.DropTargetAdapter;
importorg.eclipse.swt.dnd.DropTargetEvent;
importorg.eclipse.swt.dnd.Transfer;
importorg.eclipse.swt.events.SelectionAdapter;
importorg.eclipse.swt.events.SelectionEvent;
importorg.eclipse.swt.graphics.Image;
importorg.eclipse.swt.layout.GridData;
importorg.eclipse.swt.layout.GridLayout;
importorg.eclipse.swt.widgets.Display;
importorg.eclipse.swt.widgets.Event;
importorg.eclipse.swt.widgets.FileDialog;
importorg.eclipse.swt.widgets.Label;
importorg.eclipse.swt.widgets.Listener;
importorg.eclipse.swt.widgets.Shell;
importorg.eclipse.swt.widgets.ToolBar;
importorg.eclipse.swt.widgets.ToolItem;
importorg.eclipse.swt.widgets.Tree;
importorg.eclipse.swt.widgets.TreeItem;
classBookmark{
    publicStringname;
    publicStringhref;
    publicStringaddDate;
    publicStringlastVisited;
    publicStringlastModified;
}
publicclassBookmarkOrganizer{

    privatestaticStringfolderLinePrefix="<DT><H3FOLDED";
    privatestaticStringurlLinePrefix="<DT><AHREF";
    privatestaticPatternfolderPattern=Pattern.compile("\"(\\d+)\">(.*)<");
    privatestaticPatternurlPattern=Pattern.compile("\"(.*)\".*\"(.*)\".*\"(.*)\".*\"(.*)\">(.*)<");
    privatestaticStringKEY_ADD_DATE="ADD_DATE";
    //privatestaticStringKEY_HREF="HREF";
    //privatestaticStringKEY_LAST_VISITED="LAST_VISITED";
    //privatestaticStringKEY_LAST_MODIFIED="LAST_MODIFIED";
    Displaydisplay=newDisplay();
    Shellshell=newShell(display);
    Treetree;
    Labellabel;
    TreeItemrootItem;
    ImageiconRoot=newImage(display,"C:/icons/icon.gif");
    ImageiconFolder=newImage(display,"C:/icons/folder.gif");
    ImageiconURL=newImage(display,"C:/icons/file.gif");
    TreeItemdragSourceItem;
    publicBookmarkOrganizer(){

        shell.setText("Bookmarkorganizer");
        shell.setLayout(newGridLayout(1,true));
        ToolBartoolBar=newToolBar(shell,SWT.FLAT);
        ToolItemitemOpen=newToolItem(toolBar,SWT.PUSH);
        itemOpen.setText("Load");
        itemOpen.addListener(SWT.Selection,newListener(){
            publicvoidhandleEvent(Eventevent){
                FileDialogdialog=newFileDialog(shell,SWT.OPEN);
                Stringfile=dialog.open();
                if(file!=null){
                    TreeItem[]items=rootItem.getItems();
                    for(inti=0;i<items.length;i++)
                        items[i].dispose();
                    loadBookmark(newFile(file),rootItem);
                    setStatus("Bookmarksloadedsuccessfully");
                }
            }
        });
        ToolItemitemSave=newToolItem(toolBar,SWT.PUSH);
        itemSave.setText("Saveas");
        itemSave.addListener(SWT.Selection,newListener(){
            publicvoidhandleEvent(Eventevent){
                FileDialogdialog=newFileDialog(shell,SWT.SAVE);
                Stringfile=dialog.open();
                if(file!=null){
                    try{
                        BufferedWriterwriter=
                            newBufferedWriter(newFileWriter(file));
                        saveBookmark(writer,rootItem);
                        writer.close();
                        setStatus(
                            "Bookmarkssavedsuccessfullytofile:"+file);
                    }catch(IOExceptione){
                        e.printStackTrace();
                    }
                }
            }
        });
        tree=newTree(shell,SWT.BORDER);
        tree.setLayoutData(newGridData(GridData.FILL_BOTH));
        rootItem=newTreeItem(tree,SWT.NULL);
        rootItem.setText("BOOKMARKS");
        rootItem.setImage(iconRoot);
        label=newLabel(shell,SWT.BORDER);
        label.setLayoutData(newGridData(GridData.FILL_HORIZONTAL));
        finalDragSourcedragSource=
            newDragSource(tree,DND.DROP_MOVE|DND.DROP_COPY|DND.DROP_LINK);
        dragSource.setTransfer(
            newTransfer[]{BookmarkTransfer.getInstance()});
        dragSource.addDragListener(newDragSourceAdapter(){
            publicvoiddragStart(DragSourceEventevent){
                TreeItem[]selection=tree.getSelection();
                if(selection.length>0&&selection[0].getData()!=null){
                    event.doit=true;
                    dragSourceItem=selection[0];
                }else{
                    event.doit=false;
                }
            };
            publicvoiddragSetData(DragSourceEventevent){
                if(BookmarkTransfer
                    .getInstance()
                    .isSupportedType(event.dataType))
                    event.data=dragSourceItem.getData();
            }
            publicvoiddragFinished(DragSourceEventevent){
                if(event.detail==DND.DROP_MOVE)
                    dragSourceItem.dispose();
                dragSourceItem=null;
            }
        });
        finalDropTargetdropTarget=
            newDropTarget(tree,DND.DROP_MOVE|DND.DROP_COPY|DND.DROP_LINK);
        dropTarget.setTransfer(
            newTransfer[]{BookmarkTransfer.getInstance()});
        dropTarget.addDropListener(newDropTargetAdapter(){
            publicvoiddragOver(DropTargetEventevent){
                event.feedback=
                    DND.FEEDBACK_EXPAND
                        |DND.FEEDBACK_SCROLL
                        |DND.FEEDBACK_SELECT;
            }
            publicvoiddropAccept(DropTargetEventevent){
                if(event.item==null
                    ||((TreeItem)event.item).getData()!=null)
                    event.detail=DND.DROP_NONE;
            }
            publicvoiddrop(DropTargetEventevent){
                try{
                    if(event.data==null){
                        event.detail=DND.DROP_NONE;
                        return;
                    }
                    TreeItemitem=newTreeItem((TreeItem)event.item,SWT.NULL);
                    Bookmarkbookmark=(Bookmark)event.data;
                    item.setText(bookmark.name);
                    item.setImage(iconURL);
                    item.setData(bookmark);
                }catch(RuntimeExceptione){
                    e.printStackTrace();
                }
            }
        });
        tree.addSelectionListener(newSelectionAdapter(){
            publicvoidwidgetSelected(SelectionEvente){
                TreeItemitem=(TreeItem)e.item;
                Bookmarkbookmark=(Bookmark)item.getData();
                if(bookmark!=null){
                    setStatus(bookmark.href);
                }elseif(item.getData(KEY_ADD_DATE)!=null){
                    setStatus("Folder:"+item.getText());
                }
            }
        });
        shell.setSize(400,300);
        shell.open();
        loadBookmark(newFile("C:/icons/mybookmark.htm"),rootItem);
        while(!shell.isDisposed()){
            if(!display.readAndDispatch()){
                display.sleep();
            }
        }
        display.dispose();
    }
    privatevoidsaveBookmark(BufferedWriterwriter,TreeItemitem)
        throwsIOException{
        if(item.getData()==null
            &&item.getData(KEY_ADD_DATE)==null){
            writer.write(
                "<!DOCTYPENETSCAPE-Bookmark-file-1>\n"
                    +"<!--Thisisanautomaticallygeneratedfile.\n"
                    +"Itwillbereadandoverwritten.\n"
                    +"DoNotEdit!-->\n"
                    +"<TITLE>Bookmarks</TITLE>\n"
                    +"<H1>Bookmarks</H1>\n"
                    +"<DL><p>\n");
            TreeItem[]items=item.getItems();
            for(inti=0;i<items.length;i++)
                saveBookmark(writer,items[i]);
            writer.write("</DL><p>\n");
        }elseif(item.getData()==null){
            writer.write(
                "\t<DT><H3FOLDEDADD_DATE=\""
                    +item.getData(KEY_ADD_DATE)
                    +"\">"
                    +item.getText()
                    +"</H3>\n");
            writer.write("\t<DL><p>\n");
            TreeItem[]items=item.getItems();
            for(inti=0;i<items.length;i++)
                saveBookmark(writer,items[i]);
            writer.write("\t</DL><p>\n");
        }else{
            Bookmarkbookmark=(Bookmark)item.getData();
            writer.write(
                "\t\t<DT><AHREF="\"HREF="\"""
                    +bookmark.href
                    +"\"ADD_DATE=\""
                    +bookmark.addDate
                    +"\"LAST_VISIT=\""
                    +bookmark.lastVisited
                    +"\"LAST_MODIFIED=\"+"
                    +bookmark.lastModified
                    +"\">"
                    +bookmark.name
                    +"</A>\n");
        }
    }
    privatevoidloadBookmark(Filefile,TreeItemrootItem){
        TreeItemparent=rootItem;
        try{
            BufferedReaderreader=newBufferedReader(newFileReader(file));
            Stringline=null;
            while((line=reader.readLine())!=null){
                line=line.trim();
                if(line.startsWith(folderLinePrefix)){
                    Matchermatcher=folderPattern.matcher(line);
                    if(matcher.find()){
                        StringaddDate=matcher.group(1);
                        Stringname=matcher.group(2);
                        TreeItemitem=newTreeItem(parent,SWT.NULL);
                        item.setText(name);
                        item.setData(KEY_ADD_DATE,addDate);
                        item.setImage(iconFolder);
                        parent=item;
                    }
                }elseif(line.startsWith(urlLinePrefix)){
                    Matchermatcher=urlPattern.matcher(line);
                    if(matcher.find()){
                        Bookmarkbookmark=newBookmark();
                        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);
                        TreeItemitem=newTreeItem(parent,SWT.NULL);
                        item.setText(bookmark.name);
                        item.setData(bookmark);
                        item.setImage(iconURL);
                    }
                }elseif(line.equals("</DL><p>")){//folderboundry.
                    parent=parent.getParentItem();
                }
            }
        }catch(FileNotFoundExceptione){
            e.printStackTrace();
        }catch(IOExceptione){
            e.printStackTrace();
        }
    }
    privatevoidsetStatus(Stringmessage){
        label.setText(message);
    }
    publicstaticvoidmain(String[]args){
        newBookmarkOrganizer();
    }
}

BookmarkTransfer.java
复制代码代码如下:

packageswt_jface.demo11;
importjava.io.ByteArrayInputStream;
importjava.io.ByteArrayOutputStream;
importjava.io.DataInputStream;
importjava.io.DataOutputStream;
importjava.io.IOException;
importorg.eclipse.swt.dnd.ByteArrayTransfer;
importorg.eclipse.swt.dnd.TransferData;
publicclassBookmarkTransferextendsByteArrayTransfer{
    privatestaticfinalStringBOOKMARK_TRANSFER_NAME="BOOKMARK";
    privatestaticfinalintBOOKMARK_TRANSFER_ID=
        registerType(BOOKMARK_TRANSFER_NAME);
    privatestaticfinalBookmarkTransferinstance=newBookmarkTransfer();
    publicstaticBookmarkTransfergetInstance(){
        returninstance;
    }
    protectedint[]getTypeIds(){
        returnnewint[]{BOOKMARK_TRANSFER_ID};
    }
    protectedString[]getTypeNames(){
        returnnewString[]{BOOKMARK_TRANSFER_NAME};
    }
    protectedvoidjavaToNative(Objectobject,TransferDatatransferData){
        if(object==null||!(objectinstanceofBookmark))return;
        Bookmarkbookmark=(Bookmark)object;
        if(isSupportedType(transferData)){
            try{
                ByteArrayOutputStreamstream=newByteArrayOutputStream();
                DataOutputStreamout=newDataOutputStream(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(IOExceptione){
                e.printStackTrace();
            }
        }
    }
    protectedObjectnativeToJava(TransferDatatransferData){
        if(isSupportedType(transferData)){
            byte[]raw=(byte[])super.nativeToJava(transferData);
            if(raw==null)returnnull;
            Bookmarkbookmark=newBookmark();
            try{
                ByteArrayInputStreamstream=newByteArrayInputStream(raw);
                DataInputStreamin=newDataInputStream(stream);
                bookmark.name=in.readUTF();
                bookmark.href=in.readUTF();
                bookmark.addDate=in.readUTF();
                bookmark.lastVisited=in.readUTF();
                bookmark.lastModified=in.readUTF();
                in.close();
            }catch(IOExceptione){
                e.printStackTrace();
                returnnull;
            }
            returnbookmark;
        }else{
            returnnull;
        }
    }
}

mybookmark.htm