开发者

SWT JFace 小制作 文本阅读器

代码如下:

复制代码 代码如下:

package swt_jface.demo11;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.lang.reflect.InvocationTargetException;

import org.eclipse.core.runtime.IProgressMonitor;

import org.eclipse.jface.action.Action;

import org.eclipse.jface.action.MenuManager;

import org.eclipse.jface.action.StatusLineManager;

import org.eclipse.jface.action.ToolBarManager;

import org.eclipse.jface.operation.IRunnableWithProgress;

import org.eclipse.jface.resource.ImageDescriptor;

import org.eclipse.jface.window.ApplicationWindow;

import org.eclipse.swt.SWT;

import org.eclipse.swt.widgets.Composite;

import org.eclipse.swt.widgets.Control;

import org.eclipse.swt.widgets.FileDialog;

import org.eclipse.swt.widg编程客栈ets.Shell;

import org.eclipse.swt.widgets.Text;

public class FileViewer extends ApplicationWindow {

    Text text;

    String content;

    String lineDelimiter;

    IRunnableWithProgress runnableWithProgress = new IRunnableWithProgress() {

        public void run(IProgressMonitor monitor)

            throws InvocationTargetException, InterruptedException {

            System.out.println("Running from thread: " + Thread.currentThread().getName());

            getShell().getDisplay().syncExec(new Runnable() {

                public void run() {

                    content = text.getText();

                    lineDelimiter = text.getLineDelimiter();

                }

            });

            monitor.beginTask("Counting total number of lines", content.length());

            int lines = 1;

            for(int i=0; i<content.length(); i++) {

                if(monitor.isCanceled()) {

                    monitor.done();

                    System.out.pri开发者_Js入门ntln("Action cancelled");

                    return;

                }

                if(i + lineDelimiter.length() < content.length()) {

                    if(lineDelimiter.equals(content.substring(i, i+lineDelimiter.length()))) {

                        lines ++;

                    }

                }

                monitor.worked(1);

                Thread.sleep(1);

            }

            monitor.done();

            System.out.println("Total number of lines: " + lines);

        }

    };

    Action actionCount = new Action("Count", ImageDescriptor.createFromFile(null, "C:/icons/run.gif")) {

        public void run() {

            try {

                FileViewer.this.run(true, true, runnableWithProgress);

            } catch (InvocationTargetException e) {

                e.printStackTrace();

            } catch (InterruptedException e) {

                e.printStackTrace();

        MvuKfmLFP    }

        }

    };

    public FileViewer(Shell parentShell) {

        super(parentShell);

        addMenuBar();

        addStatusLine();

        addToolBar(SWT.FLAT);

    }

  &nwww.devze.combsp; protected Control createContents(Composite parent) {

        getShell().setText("FileViewer v2.0");

        setStatus("Ready");

        text = new Text(parent, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);

        text.setSize(300, 200);

        return text;

    }

    Action actionOpenFile = new Action("Open", ImageDescriptor.createFromFile(null, "C:/icons/open.gif")) {

        public void run() {

            FileDialog dialog = new FileDialog(getShell(), SWT.OPEN);

            final String file = dialog.open();

            if(file != null) {

                try {

                    String content = readFileAsAString(new File(file));

                    text.setText(content);

                    setStatus("File loaded successfully: " + file);

                } catch (IOException e) {

                    e.printStackTrace();

                    setStatus("Failed to load file: " + file);

                }

            }

        }

    };

    protected MenuManager createMenuManager() {

        MenuManager menuManager = new MenuManager("");

        MenuManager fileMenuManager = new MenuManager("&File");

        fileMenuManager.add(actionOpenFile);

        menuManager.add(fileMenuManager);

        MenuManager toolsMenuManager = new MenuManager("&Tools");

        toolsMenuManager.add(actionCount);

        menuManager.add(toolsMenuManager);

        return menuManager;

    }

    protected StatusLineManager createStatusLineManager() {

        return super.createStatusLineManager();

    }

    protected ToolBarManager createToolBarManager(int style) {

        ToolBarManager toolBarManager = new ToolBarManager(style);

        toolBarManager.add(actionOpenFile);

        toolBarManager.add(actionCount);

        return toolBarManager;

    }

    public static void main(String[] args) {

        ApplicationWindow viewer = new FileViewer(null);

        viewer.setBlockOnOpen(true);

        viewer.open();

    }

    public static String readFileAsAString(File file) throws IOException {

        return new String(getBytesFromFile(file));

    }

    public static byte[] getBytesFromFile(File file) throws IOException {

        InputStream is = new FileInputStream(file);

        long length = file.length();

        if (length > Integer.MAX_VALUE) {

            throw new IllegalArgumentException("File is too large! (larger or equal to 2G)");

        }

        byte[] bytes = new byte[(int) length];

        int offset = 0;

        int numRead = 0;

        while (offset < bytes.length

            && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {

            offset += numRead;

        }

        if (offset < bytes.length) {

            throw new IOException(

       &nbshttp://www.devze.comp;        "Could not completely read file " + file.getName());

        }

        is.close();

     http://www.devze.com;   return bytes;

    }

}

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜