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

源码网商城

SWT(JFace) 图片浏览器 实现代码

  • 时间:2022-02-12 17:07 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:SWT(JFace) 图片浏览器 实现代码
代码如下: ImageViewer.java
[u]复制代码[/u] 代码如下:
package swt_jface.demo11; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; 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.Canvas; 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.Shell; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; public class ImageViewer {     Display display = new Display();     Shell shell = new Shell(display);     Canvas canvas;     Image image;     String fileName;     public ImageViewer() {         shell.setText("Image viewer");         shell.setLayout(new GridLayout(1, true));         ToolBar toolBar = new ToolBar(shell, SWT.FLAT);         ToolItem itemOpen = new ToolItem(toolBar, SWT.PUSH);         itemOpen.setText("Open");         itemOpen.addListener(SWT.Selection, new Listener() {             public void handleEvent(Event event) {                 FileDialog dialog = new FileDialog(shell, SWT.OPEN);                 String file = dialog.open();                 if (file != null) {                     if (image != null)                         image.dispose();                     image = null;                     try {                         image = new Image(display, file);                     } catch (RuntimeException e) {                     }                     if (image != null) {                         fileName = file;                     } else {                         System.err.println(                             "Failed to load image from file: " + file);                     }                     canvas.redraw();                 }             }         });         ToolItem itemPrintPreview = new ToolItem(toolBar, SWT.PUSH);         itemPrintPreview.setText("Preview");         itemPrintPreview.addListener(SWT.Selection, new Listener() {             public void handleEvent(Event event) {                 ImagePrintPreviewDialog dialog =                     new ImagePrintPreviewDialog(ImageViewer.this);                 dialog.open();             }         });         ToolItem itemPrint = new ToolItem(toolBar, SWT.PUSH);         itemPrint.setText("Print");         itemPrint.addListener(SWT.Selection, new Listener() {             public void handleEvent(Event event) {                 print();             }         });         canvas = new Canvas(shell, SWT.BORDER);         canvas.setBackground(display.getSystemColor(SWT.COLOR_WHITE));         canvas.setLayoutData(new GridData(GridData.FILL_BOTH));         canvas.addPaintListener(new PaintListener() {             public void paintControl(PaintEvent e) {                 if (image == null) {                     e.gc.drawString("No image", 0, 0);                 } else {                     e.gc.drawImage(image, 0, 0);                 }             }         });         image = new Image(display, "C:/icons/scene.jpg");         fileName = "scene.jpg";         shell.setSize(500, 400);         shell.open();         while (!shell.isDisposed()) {             if (!display.readAndDispatch()) {                 display.sleep();             }         }         display.dispose();     }     void print() {         PrintDialog dialog = new PrintDialog(shell);         PrinterData printerData = dialog.open();         if (printerData == null) return;         Printer printer = new Printer(printerData);         print(printer, null);     }     void print(final Printer printer, PrintMargin printMargin) {         if (image == null) return;         final Point printerDPI = printer.getDPI();         final Point displayDPI = display.getDPI();         System.out.println(displayDPI + " " + printerDPI);         final PrintMargin margin = (printMargin == null ? PrintMargin.getPrintMargin(printer, 1.0) : printMargin);         Thread printThread = new Thread() {             public void run() {                 if (!printer.startJob(fileName)) {                     System.err.println("Failed to start print job!");                     printer.dispose();                     return;                 }                 GC gc = new GC(printer);                 if (!printer.startPage()) {                     System.err.println("Failed to start a new page!");                     gc.dispose();                     return;                 } else {                     int imageWidth = image.getBounds().width;                     int imageHeight = image.getBounds().height;                     double dpiScaleFactorX = printerDPI.x * 1.0 / displayDPI.x;                     double dpiScaleFactorY = printerDPI.y * 1.0 / displayDPI.y;                     double imageSizeFactor =                         Math.min(                             1,                             (margin.right - margin.left)                                 * 1.0                                 / (dpiScaleFactorX * imageWidth));                     imageSizeFactor =                         Math.min(                             imageSizeFactor,                             (margin.bottom - margin.top)                                 * 1.0                                 / (dpiScaleFactorY * imageHeight));                     gc.drawImage(                         image,                         0,                         0,                         imageWidth,                         imageHeight,                         margin.left,                         margin.top,                         (int) (dpiScaleFactorX * imageSizeFactor * imageWidth),                         (int) (dpiScaleFactorY                             * imageSizeFactor                             * imageHeight));                     gc.dispose();                 }                 printer.endPage();                 printer.endJob();                 printer.dispose();                 System.out.println("Printing job done!");             }         };         printThread.start();     }     public static void main(String[] args) {         new ImageViewer();     } }
ImagePrintPreviewDialog.java
[u]复制代码[/u] 代码如下:
package swt_jface.demo11; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; 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.Button; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Dialog; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; public class ImagePrintPreviewDialog extends Dialog { ImageViewer viewer; Shell shell; Canvas canvas; Printer printer; PrintMargin margin; Combo combo; public ImagePrintPreviewDialog(ImageViewer viewer) { super(viewer.shell); this.viewer = viewer; } public void open() { shell = new Shell( viewer.shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.RESIZE); shell.setText("Print preview"); shell.setLayout(new GridLayout(4, false)); final Button buttonSelectPrinter = new Button(shell, SWT.PUSH); buttonSelectPrinter.setText("Select a printer"); buttonSelectPrinter.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { PrintDialog dialog = new PrintDialog(shell); PrinterData printerData = dialog.open(); if (printerData == null) return; final Printer printer = new Printer(printerData); setPrinter( printer, Double.parseDouble( combo.getItem(combo.getSelectionIndex()))); } }); new Label(shell, SWT.NULL).setText("Margin in inches: "); combo = new Combo(shell, SWT.READ_ONLY); combo.add("0.5"); combo.add("1.0"); combo.add("1.5"); combo.add("2.0"); combo.add("2.5"); combo.add("3.0"); combo.select(1); combo.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { double value = Double.parseDouble( combo.getItem(combo.getSelectionIndex())); setPrinter(printer, value); } }); final Button buttonPrint = new Button(shell, SWT.PUSH); buttonPrint.setText("Print"); buttonPrint.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { if (printer == null) viewer.print(); else viewer.print(printer, margin); shell.dispose(); } }); canvas = new Canvas(shell, SWT.BORDER); GridData gridData = new GridData(GridData.FILL_BOTH); gridData.horizontalSpan = 4; canvas.setLayoutData(gridData); canvas.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { int canvasBorder = 20; if (printer == null || printer.isDisposed()) return; Rectangle rectangle = printer.getBounds(); Point canvasSize = canvas.getSize(); double viewScaleFactor = (canvasSize.x - canvasBorder * 2) * 1.0 / rectangle.width; viewScaleFactor = Math.min( viewScaleFactor, (canvasSize.y - canvasBorder * 2) * 1.0 / rectangle.height); int offsetX = (canvasSize.x - (int) (viewScaleFactor * rectangle.width)) / 2; int offsetY = (canvasSize.y - (int) (viewScaleFactor * rectangle.height)) / 2; e.gc.setBackground( shell.getDisplay().getSystemColor(SWT.COLOR_WHITE)); e.gc.fillRectangle( offsetX, offsetY, (int) (viewScaleFactor * rectangle.width), (int) (viewScaleFactor * rectangle.height)); e.gc.setLineStyle(SWT.LINE_DASH); e.gc.setForeground(shell.getDisplay().getSystemColor(SWT.COLOR_BLACK)); int marginOffsetX = offsetX + (int) (viewScaleFactor * margin.left); int marginOffsetY = offsetY + (int) (viewScaleFactor * margin.top); e.gc.drawRectangle( marginOffsetX, marginOffsetY, (int) (viewScaleFactor * (margin.right - margin.left)), (int) (viewScaleFactor * (margin.bottom - margin.top))); if (viewer.image != null) { int imageWidth = viewer.image.getBounds().width; int imageHeight = viewer.image.getBounds().height; double dpiScaleFactorX = printer.getDPI().x * 1.0 / shell.getDisplay().getDPI().x; double dpiScaleFactorY = printer.getDPI().y * 1.0 / shell.getDisplay().getDPI().y; double imageSizeFactor = Math.min( 1, (margin.right - margin.left) * 1.0 / (dpiScaleFactorX * imageWidth)); imageSizeFactor = Math.min( imageSizeFactor, (margin.bottom - margin.top) * 1.0 / (dpiScaleFactorY * imageHeight)); e.gc.drawImage( viewer.image, 0, 0, imageWidth, imageHeight, marginOffsetX, marginOffsetY, (int) (dpiScaleFactorX * imageSizeFactor * imageWidth * viewScaleFactor), (int) (dpiScaleFactorY * imageSizeFactor * imageHeight * viewScaleFactor)); } } }); shell.setSize(400, 400); shell.open(); setPrinter(null, 1.0); while (!shell.isDisposed()) { if (!shell.getDisplay().readAndDispatch()) { shell.getDisplay().sleep(); } } } void setPrinter(Printer printer, double marginSize) { if (printer == null) { printer = new Printer(Printer.getDefaultPrinterData()); } this.printer = printer; margin = PrintMargin.getPrintMargin(printer, marginSize); canvas.redraw(); } } package swt_jface.demo11; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; 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.Button; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Dialog; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; public class ImagePrintPreviewDialog extends Dialog {     ImageViewer viewer;     Shell shell;     Canvas canvas;     Printer printer;     PrintMargin margin;     Combo combo;     public ImagePrintPreviewDialog(ImageViewer viewer) {         super(viewer.shell);         this.viewer = viewer;     }     public void open() {         shell =             new Shell(                 viewer.shell,                 SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.RESIZE);         shell.setText("Print preview");         shell.setLayout(new GridLayout(4, false));         final Button buttonSelectPrinter = new Button(shell, SWT.PUSH);         buttonSelectPrinter.setText("Select a printer");         buttonSelectPrinter.addListener(SWT.Selection, new Listener() {             public void handleEvent(Event event) {                 PrintDialog dialog = new PrintDialog(shell);                 PrinterData printerData = dialog.open();                 if (printerData == null) return;                 final Printer printer = new Printer(printerData);                 setPrinter(                     printer,                     Double.parseDouble(                         combo.getItem(combo.getSelectionIndex())));             }         });         new Label(shell, SWT.NULL).setText("Margin in inches: ");         combo = new Combo(shell, SWT.READ_ONLY);         combo.add("0.5");         combo.add("1.0");         combo.add("1.5");         combo.add("2.0");         combo.add("2.5");         combo.add("3.0");         combo.select(1);         combo.addListener(SWT.Selection, new Listener() {             public void handleEvent(Event event) {                 double value =                     Double.parseDouble(                         combo.getItem(combo.getSelectionIndex()));                 setPrinter(printer, value);             }         });         final Button buttonPrint = new Button(shell, SWT.PUSH);         buttonPrint.setText("Print");         buttonPrint.addListener(SWT.Selection, new Listener() {             public void handleEvent(Event event) {                 if (printer == null)                     viewer.print();                 else                     viewer.print(printer, margin);                 shell.dispose();             }         });         canvas = new Canvas(shell, SWT.BORDER);         GridData gridData = new GridData(GridData.FILL_BOTH);         gridData.horizontalSpan = 4;         canvas.setLayoutData(gridData);         canvas.addPaintListener(new PaintListener() {             public void paintControl(PaintEvent e) {                 int canvasBorder = 20;                 if (printer == null || printer.isDisposed()) return;                 Rectangle rectangle = printer.getBounds();                 Point canvasSize = canvas.getSize();                 double viewScaleFactor =                     (canvasSize.x - canvasBorder * 2) * 1.0 / rectangle.width;                 viewScaleFactor =                     Math.min(                         viewScaleFactor,                         (canvasSize.y - canvasBorder * 2)                             * 1.0                             / rectangle.height);                 int offsetX =                     (canvasSize.x - (int) (viewScaleFactor * rectangle.width))                         / 2;                 int offsetY =                     (canvasSize.y - (int) (viewScaleFactor * rectangle.height))                         / 2;                 e.gc.setBackground(                     shell.getDisplay().getSystemColor(SWT.COLOR_WHITE));                 e.gc.fillRectangle(                     offsetX,                     offsetY,                     (int) (viewScaleFactor * rectangle.width),                     (int) (viewScaleFactor * rectangle.height));                 e.gc.setLineStyle(SWT.LINE_DASH);                 e.gc.setForeground(shell.getDisplay().getSystemColor(SWT.COLOR_BLACK));                 int marginOffsetX = offsetX + (int) (viewScaleFactor * margin.left);                 int marginOffsetY = offsetY + (int) (viewScaleFactor * margin.top);                 e.gc.drawRectangle(                     marginOffsetX,                     marginOffsetY,                     (int) (viewScaleFactor * (margin.right - margin.left)),                     (int) (viewScaleFactor * (margin.bottom - margin.top)));                 if (viewer.image != null) {                     int imageWidth = viewer.image.getBounds().width;                     int imageHeight = viewer.image.getBounds().height;                     double dpiScaleFactorX =                         printer.getDPI().x                             * 1.0                             / shell.getDisplay().getDPI().x;                     double dpiScaleFactorY =                         printer.getDPI().y                             * 1.0                             / shell.getDisplay().getDPI().y;                     double imageSizeFactor =                         Math.min(                             1,                             (margin.right - margin.left)                                 * 1.0                                 / (dpiScaleFactorX * imageWidth));                     imageSizeFactor =                         Math.min(                             imageSizeFactor,                             (margin.bottom - margin.top)                                 * 1.0                                 / (dpiScaleFactorY * imageHeight));                     e.gc.drawImage(                         viewer.image,                         0,                         0,                         imageWidth,                         imageHeight,                         marginOffsetX,                         marginOffsetY,                         (int) (dpiScaleFactorX                             * imageSizeFactor                             * imageWidth                             * viewScaleFactor),                         (int) (dpiScaleFactorY                             * imageSizeFactor                             * imageHeight                             * viewScaleFactor));                 }             }         });         shell.setSize(400, 400);         shell.open();         setPrinter(null, 1.0);         while (!shell.isDisposed()) {             if (!shell.getDisplay().readAndDispatch()) {                 shell.getDisplay().sleep();             }         }     }     void setPrinter(Printer printer, double marginSize) {         if (printer == null) {             printer = new Printer(Printer.getDefaultPrinterData());         }         this.printer = printer;         margin = PrintMargin.getPrintMargin(printer, marginSize);         canvas.redraw();     } }
PrintMargin.java
[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
微信版

扫一扫进微信版
返回顶部