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

(0)

相关推荐

  • 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.IProgressMonit

  • SWT(JFace)小制作 FileBrowser文件浏览

    代码如下: 复制代码 代码如下: 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)小制作 BugTracker

    代码如下: 实现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 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 ja

  • 使用AngularJS制作一个简单的RSS阅读器的教程

    简介 几年前,我用C#写了一个RSS阅读器,但是我想如果把它做成一个SPA(单页应用)效果会更好. Angular使一些事情变得简单,RSS阅读器就是其中之一. 我也用Twitter Bootstrap(做UI)实现了RSS阅读器,调试页面样式是最难的地方之一...可能是因为我不擅长css的原因. 背景 我有一些自己喜欢的网站( CodeProject, Dr.Dobb's Journal, ComputerWorld, Inc. Magazine). 然而,我发现其中很多网站都有烦人的广告.风

  • 使用Python制作简单的小程序IP查看器功能

    前言 说实话,查看电脑的IP,也挺无聊的,但是够简单,所以就从这里开始吧.IP地址在操作系统里就可以直接查看.但是除了IP地址,我们也想通过IP获取地理地址和网络运营商情况.IP地址和地理地址并没有固定的关系,所以我们需要借助网络上的数据库,或者说借助第三方的服务来查询.这里,我们选用IP.CN提供的IP地址查询服务. 基本环境配置 版本:Python3 系统:Windows 相关模块:PyQt5 实现效果图 完整代码 运行以上程序,点击按钮,大约卡顿半秒后,文本标签处就会显示我们电脑的IP地址

  • Asp+Rss阅读器制作第1/2页

    Asp+Rss阅读器制作转自凌云的BLOG 我在这里只是作了一个测试.大家可以把它具体应用,调用自己站点中的最新帖,方便用户订阅. RSS阅读器显示页面代码如下:  复制代码 代码如下: <!--#include file="conn.asp"--> <% '****************************** '文件名:index.asp '功 能:RSS阅读器显示页面 '日 期:2006-6-19 '编 程:Cloud.L '***************

  • 利用java制作一个小的目录查询器的方法

    实例如下: import java.util.*; import javax.swing.*; import java.awt.*; import java.io.*; import java.awt.event.*; class MyWindow{ private Frame f1; private Button bt1; private TextField tx1; private TextArea tx2; MyWindow(){ init(); } public void init(){

  • 编写Python脚本抓取网络小说来制作自己的阅读器

    你是否苦恼于网上无法下载的"小说在线阅读"内容?或是某些文章的内容让你很有收藏的冲动,却找不到一个下载的链接?是不是有种自己写个程序把全部搞定的冲动?是不是学了 python,想要找点东西大展拳脚,告诉别人"哥可是很牛逼的!"?那就让我们开始吧! 哈哈~     好吧,我就是最近写 Yii 写多了,想找点东西调剂一下.... = = 本项目以研究为目的,所有版权问题我们都是站在作者的一边,以看盗版小说为目的的读者们请自行面壁!     说了这么多,我们要做的就是把小

  • flex 博客阅读器 实现代码

    根据由 刘刚 翻译的"flex中文帮助"整理而来 为了完成这个项目,执行的步骤如下:1. 设置项目2. 检查要访问的远程数据源    出于安全的原因,在客户端计算机上Flash Player 中运行的应用程序,只有在满足如下    条件之一的情况下,才能访问远程的数据:    a. 应用程序的SWF 文件与远程数据源位于同一个域中.    b. 使用代理,同时SWF 文件与代理位于同一个服务器中.    c. 在数据源的宿主web 服务器上安装crossdomain.xml(跨域策略)

随机推荐