1 package swt_jface.demo11;
2 import java.io.File;
3 import java.io.FileInputStream;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.lang.reflect.InvocationTargetException;
7 import org.eclipse.core.runtime.IProgressMonitor;
8 import org.eclipse.jface.action.Action;
9 import org.eclipse.jface.action.MenuManager;
10 import org.eclipse.jface.action.StatusLineManager;
11 import org.eclipse.jface.action.ToolBarManager;
12 import org.eclipse.jface.operation.IRunnableWithProgress;
13 import org.eclipse.jface.resource.ImageDescriptor;
14 import org.eclipse.jface.window.ApplicationWindow;
15 import org.eclipse.swt.SWT;
16 import org.eclipse.swt.widgets.Composite;
17 import org.eclipse.swt.widgets.Control;
18 import org.eclipse.swt.widgets.FileDialog;
19 import org.eclipse.swt.widgets.Shell;
20 import org.eclipse.swt.widgets.Text;
21 public class FileViewer extends ApplicationWindow {
22 Text text;
23 String content;
24 String lineDelimiter;
25
26 IRunnableWithProgress runnableWithProgress = new IRunnableWithProgress() {
27 public void run(IProgressMonitor monitor)
28 throws InvocationTargetException, InterruptedException {
29 System.out.println("Running from thread: " + Thread.currentThread().getName());
30 getShell().getDisplay().syncExec(new Runnable() {
31 public void run() {
32 content = text.getText();
33 lineDelimiter = text.getLineDelimiter();
34 }
35 });
36 monitor.beginTask("Counting total number of lines", content.length());
37 int lines = 1;
38 for(int i=0; i<content.length(); i++) {
39 if(monitor.isCanceled()) {
40 monitor.done();
41 System.out.println("Action cancelled");
42 return;
43 }
44 if(i + lineDelimiter.length() < content.length()) {
45 if(lineDelimiter.equals(content.substring(i, i+lineDelimiter.length()))) {
46 lines ++;
47 }
48 }
49 monitor.worked(1);
50 Thread.sleep(1);
51 }
52 monitor.done();
53 System.out.println("Total number of lines: " + lines);
54 }
55 };
56
57 Action actionCount = new Action("Count", ImageDescriptor.createFromFile(null, "C:/icons/run.gif")) {
58 public void run() {
59 try {
60 FileViewer.this.run(true, true, runnableWithProgress);
61 } catch (InvocationTargetException e) {
62 e.printStackTrace();
63 } catch (InterruptedException e) {
64 e.printStackTrace();
65 }
66 }
67 };
68 public FileViewer(Shell parentShell) {
69 super(parentShell);
70 addMenuBar();
71 addStatusLine();
72 addToolBar(SWT.FLAT);
73 }
74 protected Control createContents(Composite parent) {
75 getShell().setText("FileViewer v2.0");
76 setStatus("Ready");
77
78 text = new Text(parent, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
79 text.setSize(300, 200);
80 return text;
81 }
82
83 Action actionOpenFile = new Action("Open", ImageDescriptor.createFromFile(null, "C:/icons/open.gif")) {
84 public void run() {
85 FileDialog dialog = new FileDialog(getShell(), SWT.OPEN);
86 final String file = dialog.open();
87 if(file != null) {
88 try {
89 String content = readFileAsAString(new File(file));
90 text.setText(content);
91 setStatus("File loaded successfully: " + file);
92 } catch (IOException e) {
93 e.printStackTrace();
94 setStatus("Failed to load file: " + file);
95 }
96 }
97 }
98 };
99 protected MenuManager createMenuManager() {
100 MenuManager menuManager = new MenuManager("");
101
102 MenuManager fileMenuManager = new MenuManager("&File");
103 fileMenuManager.add(actionOpenFile);
104
105 menuManager.add(fileMenuManager);
106
107 MenuManager toolsMenuManager = new MenuManager("&Tools");
108 toolsMenuManager.add(actionCount);
109 menuManager.add(toolsMenuManager);
110
111 return menuManager;
112 }
113 protected StatusLineManager createStatusLineManager() {
114 return super.createStatusLineManager();
115 }
116 protected ToolBarManager createToolBarManager(int style) {
117 ToolBarManager toolBarManager = new ToolBarManager(style);
118 toolBarManager.add(actionOpenFile);
119 toolBarManager.add(actionCount);
120 return toolBarManager;
121 }
122 public static void main(String[] args) {
123 ApplicationWindow viewer = new FileViewer(null);
124 viewer.setBlockOnOpen(true);
125 viewer.open();
126 }
127 public static String readFileAsAString(File file) throws IOException {
128 return new String(getBytesFromFile(file));
129 }
130 public static byte[] getBytesFromFile(File file) throws IOException {
131 InputStream is = new FileInputStream(file);
132 long length = file.length();
133 if (length > Integer.MAX_VALUE) {
134 throw new IllegalArgumentException("File is too large! (larger or equal to 2G)");
135 }
136 byte[] bytes = new byte[(int) length];
137 int offset = 0;
138 int numRead = 0;
139 while (offset < bytes.length
140 && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
141 offset += numRead;
142 }
143 if (offset < bytes.length) {
144 throw new IOException(
145 "Could not completely read file " + file.getName());
146 }
147 is.close();
148 return bytes;
149 }
150 }

SWT JFace 小制作 文本阅读器的更多相关文章

  1. 使用 Vue 和 epub.js 制作电子书阅读器

    ePub 简介 ePub 是一种电子书的标准格式,平时我看的电子书大部分是这种格式.在手机上我一般用"多看"阅读 ePub 电子书,在 Windows 上找不到用起来比较顺心的软件 ...

  2. 文本转语音TTS(文本阅读和视频配音制作)MP3

    DL-TTS 通过AI驱动引擎可将文本转化为逼真的语音,它可以:(1)生成逼真的合成语音实现与人声的语调和情感匹配的流畅.发音自然的文本转语音.(2)细化的文本转语音控制支持多种语言,并可调整语速.语 ...

  3. Android简单的编写一个txt阅读器(没有处理字符编码),适用于新手学习

    本程序只是使用了一些基本的知识点编写了一个比较简单粗陋的txt文本阅读器,效率不高,只适合新手练习.所以大神勿喷. 其实想到编写这种程序源自本人之前喜欢看小说,而很多小说更新太慢,所以本人就只能找一个 ...

  4. C#版简易RSS阅读器

    C#版简易RSS阅读器.由VB版修改完成,感谢aowind的技术支持! 源代码: using System; using System.Drawing; using System.Collection ...

  5. 微信小程序(5)--阅读器

    最近用微信小程序写了一个图书阅读器,可以实现左右滑动翻页,按钮翻页,上下滚动,切换背景,控制字体大小.以及记住设置好的状态,如页面再次进来保留上次的背景色和字体大小. 由于暂时没有真实的数据接口,所以 ...

  6. 开发微信小程序——古龙小说阅读器

    概述 由于面试的关系接触了一下微信小程序,花了2晚上开发了一个带书签功能的古龙小说阅读器,并且已经提交审核等待发布.这篇博文记录了我的开发过程和对微信小程序的看法,供以后开发时参考,相信对其他人也有用 ...

  7. android rss阅读器开发一点小技巧

    这几天一直在学习开发Rss阅读器,遇到一个很坑的问题,InputSource这里总是出错.弄了好久,终于让我找到一个解决方法----看代码: new Thread(){ @Override publi ...

  8. 简介SWT Jface

    可以使用标准窗口小部件工具箱(Standard Widget Toolkit,SWT)和 JFace 库来开发用于 Eclipse 环境的图形用户界面,而且还可以将它们用于开发单独的 GUI 本机应用 ...

  9. Linux版EPUB阅读器

    Linux版EPUB阅读器 如果说用平板电脑看书尚属主流的话,那么在电脑上读书就非常少见了.专注阅读16世纪的书是非常困难的了,没人希望后台蹦出QQ聊天窗口.但是如果你非要在电脑上打开电子书的话,那么 ...

随机推荐

  1. devops-jenkins基于角色的权限管理RBAC

    一. devops-jenkins基于角色的权限管理RBAC 1 安装角色的rbac角色管理  1.1) 点击系统管理 1.2) 选择插件管理 1.3) 选择可选插件,输入role搜索 1.4) 选择 ...

  2. 开始接触flex

    flex框架使用的是.mxml后缀的文件,可以在Eclipse导入flex开发的插件.代码写完之后需要进行编译成为.swf文件成功之后才可以正常运行.现在刚开始接触金融的项目,需求什么的还有很多不是理 ...

  3. win7如何安装maven

    1.Maven的简介Maven是一个项目管理工具,主要用于Java平台的项目构建.依赖管理和项目生命周期管理. 当然对于我这样的程序猿来说,最大的好处就是对jar包的管理比较方便,只需要告诉Maven ...

  4. WGS-84 to Web mercator

    function mercator_encrypt (wgsLat, wgsLon) {   var x = wgsLon * 20037508.34 / 180.;   var y = Math.l ...

  5. 用flannel实现跨主机container通信

    最近在看kubernetes,看到了网络部分,这部分是集群设计的难点,也是我比较感兴趣的部分.书上提到不同node的container之间通信主要使用flannel,openvswitch等技术,这些 ...

  6. 实验五 css进阶应用

    实验五 css进阶应用 实验目的: 掌握CSS在列表中的应用,能利用CSS将列表做成精美的导航栏: 掌握CSS在表单元素中的应用: 掌握SPRY菜单的制作方法和CSS代码修改. 实验内容: 1. 制作 ...

  7. MeteoInfoLab脚本示例:FY-2C 云分类HDF数据

    脚本程序: #Add data file fn = 'D:/Temp/hdf/FY2C_CLC_MLT_NOM_20070730_1800.hdf' f = addfile(fn) #Get data ...

  8. .net c#后台请求接口

    我们在请求接口的时候,有时因为跨域的问题,总是请求接口失败,亦或是请求接口时,页面还存在跳转的问题,这个时候,我们通过前台ajax请求自己的一般处理程序,用一般处理程序请求客户提供的接口 //获取to ...

  9. Socket编程,C语言版!

    socket编程--send函数&recv函数详解 一.send函数 ✍ 函数原型: int send( SOCKET s,char *buf,int len,int flags ); ✍ 功 ...

  10. 【树形DP】ZJOI2008 骑士

    题目内容 洛谷链接 有\(n\)位骑士,每个人的战力可能不同,并且每一个人都有且仅有一个憎恨的人,互相憎恨的人不能在同一队中. 求组合为一个骑士队的最大战斗力. PS:可以去看看题目背景学学历史(雾) ...