源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

SWT(JFace) 文本编辑器 实现代码

  • 时间:2022-12-10 15:56 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:SWT(JFace) 文本编辑器 实现代码
代码如下: 实现1: BasicEditor.java
[u]复制代码[/u] 代码如下:
package swt_jface.demo5; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; public class BasicEditor { Display display = new Display(); Shell shell = new Shell(display); StyledText text; boolean hasUnsavedChanges; File file; private String lastOpenDirectory; public static final String APP_NAME = "BasicEditor v1.0"; MenuItem miWrap = null; public BasicEditor() { shell.setLayout(new GridLayout()); ToolBar toolBar = new ToolBar(shell, SWT.FLAT | SWT.RIGHT ); ToolItem tiNew = new ToolItem(toolBar, SWT.PUSH); tiNew.setText("&New"); tiNew.setImage(getImage("new.gif")); tiNew.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { if(handleChangesBeforeDiscard()) { file = null; text.setText(""); } } }); ToolItem tiOpen = new ToolItem(toolBar, SWT.PUSH); tiOpen.setText("&Open"); tiOpen.setImage(getImage("open.gif")); tiOpen.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { if(handleChangesBeforeDiscard()) loadTextFromFile(); } }); ToolItem tiSave = new ToolItem(toolBar, SWT.PUSH); tiSave.setText("&Save"); tiSave.setImage(getImage("save.gif")); tiSave.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { saveTextToFile(); } }); new ToolItem(toolBar, SWT.SEPARATOR); ToolItem tiCopy = new ToolItem(toolBar, SWT.PUSH); tiCopy.setText("&Copy"); tiCopy.setImage(getImage("copy.gif")); tiCopy.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { text.copy(); } }); ToolItem tiCut = new ToolItem(toolBar, SWT.PUSH); tiCut.setText("Cu&t"); tiCut.setImage(getImage("cut.gif")); tiCut.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { text.cut(); } }); ToolItem tiPaste = new ToolItem(toolBar, SWT.PUSH); tiPaste.setText("&Paste"); tiPaste.setImage(getImage("paste.gif")); tiPaste.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { text.paste(); } }); new ToolItem(toolBar, SWT.SEPARATOR); final ToolItem tiWrap = new ToolItem(toolBar, SWT.CHECK); tiWrap.setText("&Wrap"); tiWrap.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { text.setWordWrap(tiWrap.getSelection()); miWrap.setSelection(tiWrap.getSelection()); } }); toolBar.pack(); System.out.println("Client area: " + shell.getClientArea()); text = new StyledText( shell, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); text.setLayoutData(new GridData(GridData.FILL_BOTH)); Font font = new Font(shell.getDisplay(), "Courier New", 10, SWT.NORMAL); text.setFont(font); text.setText("BasicEditor version 1.0\r\nWriten by Jack Li Guojie. "); text.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { hasUnsavedChanges = true; } }); Menu menuBar = new Menu(shell, SWT.BAR); MenuItem fileMenuItem = new MenuItem(menuBar, SWT.CASCADE); fileMenuItem.setText("&File"); Menu fileMenu = new Menu(shell, SWT.DROP_DOWN); MenuItem miNew = new MenuItem(fileMenu, SWT.PUSH); miNew.setText("&New\tCtrl+N"); miNew.setImage(getImage("new.gif")); miNew.setAccelerator(SWT.CTRL + 'N'); miNew.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { if(handleChangesBeforeDiscard()) { file = null; text.setText(""); } } }); MenuItem miOpen = new MenuItem(fileMenu, SWT.PUSH); miOpen.setText("&Open\tCtrl+O"); miOpen.setAccelerator(SWT.CTRL + 'O'); miOpen.setImage(getImage("open.gif")); miOpen.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { if(handleChangesBeforeDiscard()) loadTextFromFile(); } }); MenuItem miSave = new MenuItem(fileMenu, SWT.PUSH); miSave.setText("&Save\tCtrl+S"); miSave.setImage(getImage("save.gif")); miSave.setAccelerator(SWT.CTRL + 'S'); miSave.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { saveTextToFile(); } }); new MenuItem(fileMenu, SWT.SEPARATOR); MenuItem miExit = new MenuItem(fileMenu, SWT.PUSH); miExit.setText("&Exit"); miExit.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { if(handleChangesBeforeDiscard()) shell.dispose(); } }); fileMenuItem.setMenu(fileMenu); MenuItem editMenuItem = new MenuItem(menuBar, SWT.CASCADE); editMenuItem.setText("&Edit"); Menu editMenu = new Menu(shell, SWT.DROP_DOWN); MenuItem miCopy = new MenuItem(editMenu, SWT.PUSH); miCopy.setText("&Copy\tCtrl+C"); miCopy.setImage(getImage("copy.gif")); miCopy.setAccelerator(SWT.CTRL + 'C'); miCopy.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { text.copy(); } }); MenuItem miCut = new MenuItem(editMenu, SWT.PUSH); miCut.setText("Cu&t\tCtrl+X"); miCut.setImage(getImage("cut.gif")); miCut.setAccelerator(SWT.CTRL + 'X'); miCut.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { text.cut(); } }); MenuItem miPaste = new MenuItem(editMenu, SWT.PUSH); miPaste.setText("&Paste\tCtrl+P"); miPaste.setImage(getImage("paste.gif")); miPaste.setAccelerator(SWT.CTRL + 'P'); miPaste.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { text.paste(); } }); editMenuItem.setMenu(editMenu); MenuItem formatMenuItem = new MenuItem(menuBar, SWT.CASCADE); formatMenuItem.setText("&Format"); Menu formatMenu = new Menu(shell, SWT.DROP_DOWN); miWrap = new MenuItem(formatMenu, SWT.CHECK); miWrap.setText("&Wrap\tCtrl+W"); miWrap.setAccelerator(SWT.CTRL + 'W'); miWrap.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { text.setWordWrap(miWrap.getSelection()); tiWrap.setSelection(miWrap.getSelection()); } }); formatMenuItem.setMenu(formatMenu); shell.setMenuBar(menuBar); shell.setSize(400, 200); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } ImageRegistry imageRegistry = new ImageRegistry(); private Image getImage(String shortFileName) { if(imageRegistry.getDescriptor(shortFileName) == null) { ImageDescriptor descriptor = ImageDescriptor.createFromFile(null, "C:/icons/" + shortFileName); imageRegistry.put(shortFileName, descriptor); } return imageRegistry.get(shortFileName); } boolean handleChangesBeforeDiscard() { if(! hasUnsavedChanges) return true; MessageBox messageBox = new MessageBox(shell, SWT.ICON_WARNING | SWT.YES | SWT.NO | SWT.CANCEL); messageBox.setMessage("Do you want to save the changes to " + (file == null ? "a file?" : file.getName())); messageBox.setText(APP_NAME); int ret = messageBox.open(); if(ret == SWT.YES) { return saveTextToFile(); }else if(ret == SWT.NO) { return true; }else{ return false; } } boolean loadTextFromFile() { FileDialog dialog = new FileDialog(shell, SWT.OPEN); if (lastOpenDirectory != null) dialog.setFilterPath(lastOpenDirectory); String selectedFile = dialog.open(); if (selectedFile == null) { log("Action cancelled: loading the text from a file"); return false; } file = new File(selectedFile); lastOpenDirectory = file.getParent(); try { BufferedReader reader = new BufferedReader(new FileReader(file)); StringBuffer sb = new StringBuffer(); String line = null; while((line = reader.readLine()) != null) { sb.append(line); sb.append("\r\n"); } text.setText(sb.toString()); return true; }catch(IOException e) { log("Failed to load the text from file: " + file); log(e.toString()); } return false; } boolean saveTextToFile() { if (file == null) { FileDialog dialog = new FileDialog(shell, SWT.SAVE); if (lastOpenDirectory != null) dialog.setFilterPath(lastOpenDirectory); String selectedFile = dialog.open(); if (selectedFile == null) { log("Action cancelled: saving the text to a file"); return false; } file = new File(selectedFile); lastOpenDirectory = file.getParent(); } try { FileWriter writer = new FileWriter(file); writer.write(text.getText()); writer.close(); log("The text has been saved to file: " + file); hasUnsavedChanges = false; return true; } catch (IOException e) { log("Failed to save the text to file: " + file); log(e.toString()); } return false; } void log(String message) { System.out.println(message); } public static void main(String[] args) { new BasicEditor(); } }
实现2: BasicEditor2.java
[u]复制代码[/u] 代码如下:
package swt_jface.demo5; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Decorations; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; public class BasicEditor2 { Display display = new Display(); Shell shell = new Shell(display); StyledText text; boolean hasUnsavedChanges; File file; private String lastOpenDirectory; public static final String APP_NAME = "BasicEditor v2.0"; MenuItem miWrap = null; public BasicEditor2() { Action actionNew = new Action( "&New", ImageDescriptor.createFromFile(null, "C:/icons/new.gif")) { public void run() { if (handleChangesBeforeDiscard()) { file = null; text.setText(""); } } }; actionNew.setAccelerator(SWT.CTRL + 'N'); Action actionOpen = new Action( "&Open", ImageDescriptor.createFromFile(null, "C:/icons/open.gif")) { public void run() { if (handleChangesBeforeDiscard()) loadTextFromFile(); } }; actionOpen.setAccelerator(SWT.CTRL + 'O'); Action actionSave = new Action( "&Save\tCtrl+S", ImageDescriptor.createFromFile(null, "C:/icons/save.gif")) { public void run() { saveTextToFile(); } }; //actionSave.setAccelerator(SWT.CTRL + 'S'); Action actionCopy = new Action( "&Copy", ImageDescriptor.createFromFile(null, "C:/icons/copy.gif")) { public void run() { text.copy(); } }; actionCopy.setAccelerator(SWT.CTRL + 'C'); Action actionCut = new Action( "Cu&t", ImageDescriptor.createFromFile(null, "C:/icons/cut.gif")) { public void run() { text.cut(); } }; actionCut.setAccelerator(SWT.CTRL + 'X'); Action actionPaste = new Action( "&Paste", ImageDescriptor.createFromFile(null, "C:/icons/paste.gif")) { public void run() { text.paste(); } }; actionPaste.setAccelerator(SWT.CTRL + 'P'); Action actionWrap = new Action( "&Wrap", IAction.AS_CHECK_BOX) { public void run() { text.setWordWrap(isChecked()); } }; actionWrap.setAccelerator(SWT.CTRL + 'W'); Action actionExit = new Action("&Exit@Ctrl+X") { public void run() { if (handleChangesBeforeDiscard()) shell.dispose(); } }; System.out.println(actionWrap.getText()); ToolBar toolBar = new ToolBar(shell, SWT.FLAT | SWT.RIGHT); ToolBarManager toolBarManager = new ToolBarManager(toolBar); toolBarManager.add(actionNew); toolBarManager.add(actionOpen); toolBarManager.add(actionSave); toolBarManager.add(new Separator()); toolBarManager.add(actionCopy); toolBarManager.add(actionCut); toolBarManager.add(actionPaste); toolBarManager.add(new Separator()); toolBarManager.add(actionWrap); toolBarManager.update(true); shell.setLayout(new GridLayout()); System.out.println("Client area: " + shell.getClientArea()); text = new StyledText( shell, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); text.setLayoutData(new GridData(GridData.FILL_BOTH)); Font font = new Font(shell.getDisplay(), "Courier New", 10, SWT.NORMAL); text.setFont(font); text.setText("BasicEditor version 1.0\r\nWriten by Jack Li Guojie. "); text.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { hasUnsavedChanges = true; } }); MenuManager barMenuManager = new MenuManager(); MenuManager fileMenuManager = new MenuManager("&File"); MenuManager editMenuManager = new MenuManager("&Edit"); MenuManager formatMenuManager = new MenuManager("&Format"); barMenuManager.add(fileMenuManager); barMenuManager.add(editMenuManager); barMenuManager.add(formatMenuManager); fileMenuManager.add(actionNew); fileMenuManager.add(actionOpen); fileMenuManager.add(actionSave); fileMenuManager.add(new Separator()); fileMenuManager.add(actionExit); editMenuManager.add(actionCopy); editMenuManager.add(actionCut); editMenuManager.add(actionPaste); formatMenuManager.add(actionWrap); // shell.setMenuBar(menuBar); barMenuManager.updateAll(true); shell.setMenuBar(barMenuManager.createMenuBar((Decorations)shell)); shell.setSize(400, 200); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } ImageRegistry imageRegistry = new ImageRegistry(); private Image getImage(String shortFileName) { if (imageRegistry.getDescriptor(shortFileName) == null) { ImageDescriptor descriptor = ImageDescriptor.createFromFile(null, "C:/icons/" + shortFileName); imageRegistry.put(shortFileName, descriptor); } return imageRegistry.get(shortFileName); } boolean handleChangesBeforeDiscard() { if (!hasUnsavedChanges) return true; MessageBox messageBox = new MessageBox( shell, SWT.ICON_WARNING | SWT.YES | SWT.NO | SWT.CANCEL); messageBox.setMessage( "Do you want to save the changes to " + (file == null ? "a file?" : file.getName())); messageBox.setText(APP_NAME); int ret = messageBox.open(); if (ret == SWT.YES) { return saveTextToFile(); } else if (ret == SWT.NO) { return true; } else { return false; } } boolean loadTextFromFile() { FileDialog dialog = new FileDialog(shell, SWT.OPEN); if (lastOpenDirectory != null) dialog.setFilterPath(lastOpenDirectory); String selectedFile = dialog.open(); if (selectedFile == null) { log("Action cancelled: loading the text from a file"); return false; } file = new File(selectedFile); lastOpenDirectory = file.getParent(); try { BufferedReader reader = new BufferedReader(new FileReader(file)); StringBuffer sb = new StringBuffer(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line); sb.append("\r\n"); } text.setText(sb.toString()); return true; } catch (IOException e) { log("Failed to load the text from file: " + file); log(e.toString()); } return false; } boolean saveTextToFile() { if (file == null) { FileDialog dialog = new FileDialog(shell, SWT.SAVE); if (lastOpenDirectory != null) dialog.setFilterPath(lastOpenDirectory); String selectedFile = dialog.open(); if (selectedFile == null) { log("Action cancelled: saving the text to a file"); return false; } file = new File(selectedFile); lastOpenDirectory = file.getParent(); } try { FileWriter writer = new FileWriter(file); writer.write(text.getText()); writer.close(); log("The text has been saved to file: " + file); hasUnsavedChanges = false; return true; } catch (IOException e) { log("Failed to save the text to file: " + file); log(e.toString()); } return false; } void log(String message) { System.out.println(message); } public static void main(String[] args) { new BasicEditor2(); } }
实现3: BasicEditor3.java
[u]复制代码[/u] 代码如下:
package swt_jface.demo11; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.custom.StyledTextPrintOptions; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.printing.PrintDialog; import org.eclipse.swt.printing.Printer; import org.eclipse.swt.printing.PrinterData; import org.eclipse.swt.widgets.Decorations; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; public class BasicEditor3 {     Display display = new Display();     Shell shell = new Shell(display);     StyledText text;     boolean hasUnsavedChanges;     File file;     private String lastOpenDirectory;     public static final String APP_NAME = "BasicEditor v3.0";     MenuItem miWrap = null;     public BasicEditor3() {         Action actionNew =             new Action(                 "&New",                 ImageDescriptor.createFromFile(null, "C:/icons/new.gif")) {             public void run() {                 if (handleChangesBeforeDiscard()) {                     file = null;                     text.setText("");                 }             }         };         actionNew.setAccelerator(SWT.CTRL + 'N');         Action actionOpen =             new Action(                 "&Open",                 ImageDescriptor.createFromFile(null, "C:/icons/open.gif")) {             public void run() {                 if (handleChangesBeforeDiscard())                     loadTextFromFile();             }         };         actionOpen.setAccelerator(SWT.CTRL + 'O');         Action actionSave =             new Action(                 "&Save\tCtrl+S",                 ImageDescriptor.createFromFile(null, "C:/icons/save.gif")) {             public void run() {                 saveTextToFile();             }         };         actionSave.setAccelerator(SWT.CTRL + 'S');         Action actionCopy =             new Action(                 "&Copy",                 ImageDescriptor.createFromFile(null, "C:/icons/copy.gif")) {             public void run() {                 text.copy();             }         };         actionCopy.setAccelerator(SWT.CTRL + 'C');         Action actionCut =             new Action(                 "Cu&t",                 ImageDescriptor.createFromFile(null, "C:/icons/cut.gif")) {             public void run() {                 text.cut();             }         };         actionCut.setAccelerator(SWT.CTRL + 'X');         Action actionPaste =             new Action(                 "&Paste",                 ImageDescriptor.createFromFile(null, "C:/icons/paste.gif")) {             public void run() {                 text.paste();             }         };         actionPaste.setAccelerator(SWT.CTRL + 'P');         Action actionWrap =             new Action(                 "&Wrap", IAction.AS_CHECK_BOX) {             public void run() {                 text.setWordWrap(isChecked());             }         };         actionWrap.setAccelerator(SWT.CTRL + 'W');         Action actionExit = new Action("&Exit@Ctrl+X") {             public void run() {                 if (handleChangesBeforeDiscard())                     shell.dispose();             }         };         Action actionPrint = new Action("&Print@Ctrl+P") {             public void run() {                 printText(text.getText());             }         };         Action actionPrint2 = new Action("Print (StyledText)") {             public void run() {                 StyledTextPrintOptions options = new StyledTextPrintOptions();                 options.header = "SWT";                 options.footer = "Page <page>";                 options.jobName = "Text";                 Runnable runnable = text.print(new Printer(), options);                 runnable.run();             }         };         ToolBar toolBar = new ToolBar(shell, SWT.FLAT | SWT.RIGHT);         ToolBarManager toolBarManager = new ToolBarManager(toolBar);         toolBarManager.add(actionNew);         toolBarManager.add(actionOpen);         toolBarManager.add(actionSave);         toolBarManager.add(new Separator());         toolBarManager.add(actionCopy);         toolBarManager.add(actionCut);         toolBarManager.add(actionPaste);         toolBarManager.add(new Separator());         toolBarManager.add(actionWrap);         toolBarManager.add(new Separator());         toolBarManager.add(actionPrint);         toolBarManager.add(actionPrint2);         toolBarManager.update(true);         shell.setText(APP_NAME);         shell.setLayout(new GridLayout());         text =             new StyledText(                 shell,                 SWT.MULTI                     | SWT.WRAP                     | SWT.BORDER                     | SWT.H_SCROLL                     | SWT.V_SCROLL);         text.setLayoutData(new GridData(GridData.FILL_BOTH));         Font font = new Font(shell.getDisplay(), "Courier New", 10, SWT.NORMAL);         text.setFont(font);         text.setText("BasicEditor version 3.0\r\nWriten by Jack Li Guojie. ");         text.addModifyListener(new ModifyListener() {             public void modifyText(ModifyEvent e) {                 hasUnsavedChanges = true;             }         });         MenuManager barMenuManager = new MenuManager();         MenuManager fileMenuManager = new MenuManager("&File");         MenuManager editMenuManager = new MenuManager("&Edit");         MenuManager formatMenuManager = new MenuManager("&Format");         barMenuManager.add(fileMenuManager);         barMenuManager.add(editMenuManager);         barMenuManager.add(formatMenuManager);         fileMenuManager.add(actionNew);         fileMenuManager.add(actionOpen);         fileMenuManager.add(actionSave);         fileMenuManager.add(actionPrint);         fileMenuManager.add(new Separator());         fileMenuManager.add(actionExit);         editMenuManager.add(actionCopy);         editMenuManager.add(actionCut);         editMenuManager.add(actionPaste);         formatMenuManager.add(actionWrap);         //shell.setMenuBar(menuBar);         barMenuManager.updateAll(true);         shell.setMenuBar(barMenuManager.createMenuBar((Decorations)shell));         shell.setSize(400, 200);         shell.open();         while (!shell.isDisposed()) {             if (!display.readAndDispatch()) {                 display.sleep();             }         }         display.dispose();     }     int x;     int y;     int lineHeight;     PrintMargin margins;     int pageNumber = 1;     int lineNumber = 1;     void printText(String text) {         PrintDialog dialog = new PrintDialog(shell);         PrinterData printerData = dialog.open();         if(printerData == null) return;         Printer printer = new Printer(printerData);         if(! printer.startJob("text")) return;         GC gc = new GC(printer);         margins = PrintMargin.getPrintMargin(printer, 1.0);         x = margins.left;         y = margins.top;         StringBuffer buffer = new StringBuffer();         Font font = new Font(printer, "Arial", 12, SWT.NORMAL);         gc.setFont(font);         lineHeight = gc.getFontMetrics().getHeight();         printer.startPage();         String page = "- " + pageNumber + " -";         gc.drawString(page, (margins.right - margins.left - gc.textExtent(page).x) / 2 + margins.left, margins.bottom + gc.textExtent(page).y);         for(int index = 0; index <text.length();) {             char c = text.charAt(index);             switch(c) {                 case '\r':                     if(index < text.length() - 1 && text.charAt(index + 1) == '\n') {                         printNewLine(printer, gc, buffer.toString());                         buffer.setLength(0);                         index += 2;                     }                     break;                 case '\t':                 case ' ':                     if(gc.textExtent(buffer.toString() + ' ').x > margins.right - margins.left) {                         printNewLine(printer, gc, buffer.toString());                         buffer.setLength(0);                     }                     buffer.append(c);                     if(index < text.length() - 1 && (!Character.isWhitespace(text.charAt(index + 1)))) { // Looks up one word to see whether the line should wraps here.                         String word = readWord(text, index + 1);                         if(gc.textExtent(buffer.toString() + word).x > margins.right - margins.left) {                             printNewLine(printer, gc, buffer.toString());                             buffer.setLength(0);                         }                     }                     index += 1;                     break;                 default:                     buffer.append(c);                     index += 1;             }         }         if(buffer.length() > 0) printNewLine(printer, gc, buffer.toString());         if(y + lineHeight <= margins.bottom) printer.endPage();         printer.endJob();         gc.dispose();         font.dispose();         printer.dispose();     }     void printNewLine(Printer printer, GC gc, String line) {         if(y + lineHeight > margins.bottom) {             printer.endPage();             x = margins.left;             y = margins.top;             pageNumber ++;             lineNumber = 1;             String page = "- " + pageNumber + " -";             gc.drawString(page, (margins.right - margins.left - gc.textExtent(page).x) / 2 + margins.left, margins.bottom + gc.textExtent(page).y);         }         gc.drawString(line, x, y);         y += lineHeight;     }     String readWord(String text, int offset) {         StringBuffer sb = new StringBuffer();         int index = offset;         char c = 0;         while(index < text.length()) {             c = text.charAt(index);             if(Character.isWhitespace(c)) break;             sb.append(c);             index += 1;         }         return sb.toString();     }     ImageRegistry imageRegistry = new ImageRegistry(); //    private Image getImage(String shortFileName) { //        if (imageRegistry.getDescriptor(shortFileName) == null) { //            ImageDescriptor descriptor = //                ImageDescriptor.createFromFile(null, "C:/icons/" + shortFileName); //            imageRegistry.put(shortFileName, descriptor); //        } //        return imageRegistry.get(shortFileName); //    }     boolean handleChangesBeforeDiscard() {         if (!hasUnsavedChanges)             return true;         MessageBox messageBox =             new MessageBox(                 shell,                 SWT.ICON_WARNING | SWT.YES | SWT.NO | SWT.CANCEL);         messageBox.setMessage(             "Do you want to save the changes to "                 + (file == null ? "a file?" : file.getName()));         messageBox.setText(APP_NAME);         int ret = messageBox.open();         if (ret == SWT.YES) {             return saveTextToFile();         } else if (ret == SWT.NO) {             return true;         } else {             return false;         }     }     boolean loadTextFromFile() {         FileDialog dialog = new FileDialog(shell, SWT.OPEN);         if (lastOpenDirectory != null)             dialog.setFilterPath(lastOpenDirectory);         String selectedFile = dialog.open();         if (selectedFile == null) {             log("Action cancelled: loading the text from a file");             return false;         }         file = new File(selectedFile);         lastOpenDirectory = file.getParent();         try {             BufferedReader reader = new BufferedReader(new FileReader(file));             StringBuffer sb = new StringBuffer();             String line = null;             while ((line = reader.readLine()) != null) {                 sb.append(line);                 sb.append("\r\n");             }             text.setText(sb.toString());             return true;         } catch (IOException e) {             log("Failed to load the text from file: " + file);             log(e.toString());         }         return false;     }     boolean saveTextToFile() {         if (file == null) {             FileDialog dialog = new FileDialog(shell, SWT.SAVE);             if (lastOpenDirectory != null)                 dialog.setFilterPath(lastOpenDirectory);             String selectedFile = dialog.open();             if (selectedFile == null) {                 log("Action cancelled: saving the text to a file");                 return false;             }             file = new File(selectedFile);             lastOpenDirectory = file.getParent();         }         try {             FileWriter writer = new FileWriter(file);             writer.write(text.getText());             writer.close();             log("The text has been saved to file: " + file);             hasUnsavedChanges = false;             return true;         } catch (IOException e) {             log("Failed to save the text to file: " + file);             log(e.toString());         }         return false;     }     void log(String message) {         System.out.println(message);     }     public static void main(String[] args) {         new BasicEditor3();     } }
追加了打印机能,需要下面这个类:
[u]复制代码[/u] 代码如下:
package swt_jface.demo11; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.printing.Printer; public class PrintMargin {     public int left;     public int right;     public int top;     public int bottom;     private PrintMargin(int left, int right, int top, int bottom) {         this.left = left;         this.right = right;         this.top = top;         this.bottom = bottom;     }     static PrintMargin getPrintMargin(Printer printer, double margin) {         return getPrintMargin(printer, margin, margin, margin, margin);     }     static PrintMargin getPrintMargin(         Printer printer,         double marginLeft,         double marginRight,         double marginTop,         double marginBottom) {         Rectangle clientArea = printer.getClientArea();         Rectangle trim = printer.computeTrim(0, 0, 0, 0);         Point dpi = printer.getDPI();         int leftMargin = (int) (marginLeft * dpi.x) - trim.x;         int rightMargin =             clientArea.width                 + trim.width                 - (int) (marginRight * dpi.x)                 - trim.x;         int topMargin = (int) (marginTop * dpi.y) - trim.y;         int bottomMargin =             clientArea.height                 + trim.height                 - (int) (marginBottom * dpi.y)                 - trim.y;         return new PrintMargin(             leftMargin,             rightMargin,             topMargin,             bottomMargin);     }     public String toString() {         return "Margin { "             + left             + ", "             + right             + "; "             + top             + ", "             + bottom             + " }";     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部