09-07
23

生成Bookmark

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="\" mce_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();  
    }  
}  
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="\" mce_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;  
        }  
    }  
}  


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: SWT(JFace) GUI
相关日志:
评论: 0 | 引用: 0 | 查看次数: 275
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭