SWT JFace 小制作 文本阅读器_Java编程

代码如下:

复制代码 代码如下:

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;
    }
}

时间: 2024-11-08 20:52:59

SWT JFace 小制作 文本阅读器_Java编程的相关文章

SWT(JFace)小制作 FileBrowser文件浏览_Java编程

代码如下: 复制代码 代码如下: package swt_jface.demo6; import java.io.File; import java.util.Date; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import o

SWT(JFace)体验之ViewForm的使用_Java编程

代码如下: 复制代码 代码如下: package swt_jface.demo9; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ViewForm; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.s

SWT(JFace)小制作 BugTracker_Java编程

代码如下: 实现1: BugTracker.java 复制代码 代码如下: package swt_jface.demo6; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import j

SWT(JFace)体验之模拟BorderLayout布局_Java编程

SWT中没有AWT的BorderLayout布局管理器.下面是SWT下的自定义实现: BorderLayout.java 复制代码 代码如下: package swt_jface.demo2; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; i

SWT(JFace) Menu、Bar...体验代码_Java编程

演示代码: MenuExamples.java 复制代码 代码如下: package swt_jface.demo5; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; impo

电子书-android文本阅读器中分页的问题 sos

问题描述 android文本阅读器中分页的问题 sos 想自己做个文本阅读器当做练习,现在遇到的问题是读取的电子书如何加载到view中. 1.全部读入并加载,但是文件较大时会很慢 2.分页加载,问题是如何确认每次加载的最大文字数?因为文件中会有换行.空格等 解决方案 现在电子书源码到处都是,可以下载一个看看http://code1.okbase.net/codefile/BookPageFactory.java_2014040626020_3.htm

电子书-android文本阅读器中分页的问题

问题描述 android文本阅读器中分页的问题 想自己做个文本阅读器当做练习,现在遇到的问题是读取的电子书如何加载到view中. 1.全部读入并加载,但是文件较大时会很慢 2.分页加载,问题是如何确认每次加载的最大文字数?因为文件中会有换行.空格等 解决方案 怎么没有人理,是不是都还在睡午觉==.

实例:用Visual C#制作新闻阅读器

visual 一.弄清结构再动手 要想轻松的抽取RSS信息,自然先要了解它的结构,所谓"知己知彼,百战不殆"嘛. 1.RSS的结构 我们先打开百度新闻一个RSS链接,如果你再多打开几个别的网站的RSS链接,会发现他们都有大致相同的结构.而我们在揭秘RSS(上)中为大家讲解的其实就是编成实现这样的一个XML文件. 为了能够方便地对这样的XML文档进行处理,在本文里,我们使用C#作为开发的语言. 分析整个RSS链接后,我们知道RSS大致的结构入图1. 2.抽取的原理 知道了结构,我们还要知

用Visual C#制作新闻阅读器

visual 一.弄清结构再动手 要想轻松的抽取RSS信息,自然先要了解它的结构,所谓"知己知彼,百战不殆"嘛. 1.RSS的结构 我们先打开百度新闻一个RSS链接,如果你再多打开几个别的网站的RSS链接,会发现他们都有大致相同的结构.而我们在揭秘RSS(上)中为大家讲解的其实就是编成实现这样的一个XML文件. 为了能够方便地对这样的XML文档进行处理,在本文里,我们使用C#作为开发的语言. 分析整个RSS链接后,我们知道RSS大致的结构入图1. 2.抽取的原理 知道了结构,我们还要知