SWT JFace 小制作 文本阅读器

页面导航:首页 > 软件编程 > Java编程 > SWT JFace 小制作 文本阅读器

SWT JFace 小制作 文本阅读器

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

代码如下: 复制代码 代码如下: 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

代码如下:

复制代码代码如下:


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.widgets.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.println("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(); 
            } 
        } 
    }; 
    public FileViewer(Shell parentShell) { 
        super(parentShell); 
        addMenuBar(); 
        addStatusLine(); 
        addToolBar(SWT.FLAT); 
    } 
    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( 
                "Could not completely read file " + file.getName()); 
        } 
        is.close(); 
        return bytes; 
    } 
}


Tags:

文章评论

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

<