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聊天窗口.但是如果你非要在电脑上打开电子书的话,那么 ...
随机推荐
- Java之ConcurrentHashMap源码解析
ConcurrentHashMap源码解析 目录 ConcurrentHashMap源码解析 jdk8之前的实现原理 jdk8的实现原理 变量解释 初始化 初始化table put操作 hash算法 ...
- JVM 内存分配和占用
我们从一个简单示例来引出JVM的内存模型 简单示例 我从一个简单示例谈起这一块,我在看一篇文章的时候看到这么一个场景并且自己做了尝试,就是分配一个2M的数组,使用Xmx即最大内存为12M的话,会报错J ...
- 详解gitignore的使用方法,让你尽情使用git add .
大家好,欢迎来到周一git专题. 今天和大家聊聊gitignore的作用,其实如果你英文还可以的话,你应该已经基本上猜到它的作用了.ignore在英文当中的意思是忽视.忽略,gitignore自然就是 ...
- 52.Qt-Charts动态显示多条折线电压值(实现示波器效果)
Qt 5.7过后Qt添加了官方的Chart库,之前就用的比较习惯,这次把源码发出来,给入门的同学们参考参考. 效果如下所示: 1.chartsView.h如下所示: #ifndef VIEW_H #d ...
- day17 Pyhton学习 内置函数继续
1. locals 本地作用域/局部作用域 会随着位置的改变而改变 2.globals 全局作用域 永远不变,永远是全局 3.complex:复数 实数(有理数和无理数) 某一个数的平方是-1 ...
- 19。删除链表倒数第N个节点
class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next# 这道题还是很简单的,我们只 ...
- centOS7 查看防火墙状态 开放端口
一.防火墙的开启.关闭.禁用命令 (1)设置开机启用防火墙:systemctl enable firewalld.service (2)设置开机禁用防火墙:systemctl disable fire ...
- centos8平台用NetworkManager/nmcli管理网络
一,centos8上,网络服务的管理需要NetworkManager服务 1,NetworkManager的服务操作 启动 [root@localhost network-scripts]# syst ...
- react渲染数据3种方式
直接渲染,()类似于模板字符串,包裹一个dom元素 ReactDOM.render( (<div> <h2>现在时间:{new Date().toLocaleTimeStrin ...
- 对接天猫精灵X1 (https 的申请)
1 起因 公司是做智能家居的,最近公司要求对接天猫精灵的智能家居功能,所以就来对接天猫精灵X1 了. 新产品,大家都懂的,坑是有不少的,正常事. 1 首先,语言是 c#,不要和我讲 php 是世界最好 ...