SWT JFace 小制作 文本阅读器
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 小制作 文本阅读器的更多相关文章
- 使用 Vue 和 epub.js 制作电子书阅读器
		
ePub 简介 ePub 是一种电子书的标准格式,平时我看的电子书大部分是这种格式.在手机上我一般用"多看"阅读 ePub 电子书,在 Windows 上找不到用起来比较顺心的软件 ...
 - 文本转语音TTS(文本阅读和视频配音制作)MP3
		
DL-TTS 通过AI驱动引擎可将文本转化为逼真的语音,它可以:(1)生成逼真的合成语音实现与人声的语调和情感匹配的流畅.发音自然的文本转语音.(2)细化的文本转语音控制支持多种语言,并可调整语速.语 ...
 - Android简单的编写一个txt阅读器(没有处理字符编码),适用于新手学习
		
本程序只是使用了一些基本的知识点编写了一个比较简单粗陋的txt文本阅读器,效率不高,只适合新手练习.所以大神勿喷. 其实想到编写这种程序源自本人之前喜欢看小说,而很多小说更新太慢,所以本人就只能找一个 ...
 - C#版简易RSS阅读器
		
C#版简易RSS阅读器.由VB版修改完成,感谢aowind的技术支持! 源代码: using System; using System.Drawing; using System.Collection ...
 - 微信小程序(5)--阅读器
		
最近用微信小程序写了一个图书阅读器,可以实现左右滑动翻页,按钮翻页,上下滚动,切换背景,控制字体大小.以及记住设置好的状态,如页面再次进来保留上次的背景色和字体大小. 由于暂时没有真实的数据接口,所以 ...
 - 开发微信小程序——古龙小说阅读器
		
概述 由于面试的关系接触了一下微信小程序,花了2晚上开发了一个带书签功能的古龙小说阅读器,并且已经提交审核等待发布.这篇博文记录了我的开发过程和对微信小程序的看法,供以后开发时参考,相信对其他人也有用 ...
 - android rss阅读器开发一点小技巧
		
这几天一直在学习开发Rss阅读器,遇到一个很坑的问题,InputSource这里总是出错.弄了好久,终于让我找到一个解决方法----看代码: new Thread(){ @Override publi ...
 - 简介SWT Jface
		
可以使用标准窗口小部件工具箱(Standard Widget Toolkit,SWT)和 JFace 库来开发用于 Eclipse 环境的图形用户界面,而且还可以将它们用于开发单独的 GUI 本机应用 ...
 - Linux版EPUB阅读器
		
Linux版EPUB阅读器 如果说用平板电脑看书尚属主流的话,那么在电脑上读书就非常少见了.专注阅读16世纪的书是非常困难的了,没人希望后台蹦出QQ聊天窗口.但是如果你非要在电脑上打开电子书的话,那么 ...
 
随机推荐
- 题解 SP1026 【FAVDICE - Favorite Dice】
			
首先,这是一道经典的期望dp题 因为最终状态 $ (所有面都被筛到过) $ 是确定的,所以才用 逆推 ,设状态 $ f[i] $ 表示已经筛到了 $ i $ 个不同的面,有 $ i\over n $ ...
 - Ubuntu通过iptables配置 ip 代理转发
			
开启 ip 代理转发 临时开启 ip 代理转发 # 执行该命令后立即生效,但是重启后会失效 echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward 永久开启 i ...
 - spring-boot-route(十四)整合Kafka
			
在上一章中SpringBoot整合RabbitMQ,已经详细介绍了消息队列的作用,这一种我们直接来学习SpringBoot如何整合kafka发送消息. kafka简介 kafka是用Scala和Jav ...
 - FastJson解析Json,封装JavaBean对象
			
获取到前端的Json,后台对应封装JavaBean对象,对其解析赋值 获取到前端的json,对其进行分析 1.获取最外层前端json对应得JavaBean (1)未分析格式的json串 (2)初步格式 ...
 - 自定义Antd Pro 默认元素
			
概要 通用元素 修改的方式 主页面 标签上的图标 logo 和 系统名称 footer 的配置 loading 页面 最终效果 概要 使用 Antd Pro 来开发前端项目时, 生成的项目模板中, 一 ...
 - 2017年 实验四 B2C模拟实验
			
实验四 B2C模拟实验 [实验目的] 掌握网上购物的基本流程和B2C平台的运营 [实验条件] ⑴.个人计算机一台 ⑵.计算机通过局域网形式接入互联网. (3).奥派电子商 ...
 - 《罗辑思维》试读:U盘化生存
			
<罗辑思维>试读:U盘化生存 何为"U盘" 记得有一次我到一个大学去讲课,我随机做了一个调查.我说大四啦,咱们班同学谁找着工作了,一堆人举手.我又问都加入什么样的组织了 ...
 - 多测师讲解ui自动化框架设计思想_高级讲师肖sir
			
UI自动化框架:UI自动化框架可以分为8个模块,conf.data.public.pageobject.testcase.runner.report.log.conf是用来储存系统环境.数据库.邮件的 ...
 - js、css等文件引入空白问题
			
路径没错,不管路径怎么改变,js.css等文件就是引入失败.很多时候是因为Spring的过滤器把js.css等资源文件拦截了.default是tomcat配置的一个servlet,"Defa ...
 - c++ 通用单例类声明
			
//单例类定义#define CLASS_INSTANCE_DEF(className) \public: \ static className* GetInstance() \ { \ static ...