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 }

 

上一篇:oracle如何看审计的结果


下一篇:JAVA SWT的MessageBox对话框