SWT JFace 小制作 文本阅读器
SWT JFace 小制作 文本阅读器
发布时间:2016-12-28 来源:查字典编辑
摘要:代码如下:复制代码代码如下:packageswt_jface.demo11;importjava.io.File;importjava.io...

代码如下:

复制代码 代码如下:

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;

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Java学习
热门Java学习
编程开发子分类