Java/SWT JFace Eclipse/Print
Содержание
Demonstrates printing images
<source lang="java">
//Send questions, comments, bug reports, etc. to the authors: //Rob Warner (rwarner@interspatial.ru) //Robert Harris (rbrt_harris@yahoo.ru) import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.printing.*; import org.eclipse.swt.widgets.*; /**
* This class demonstrates printing images */
public class ImagePrinterExample {
/** * The application entry point * @param args the command line arguments */ public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display, SWT.NONE); try { // Prompt the user for an image file FileDialog fileChooser = new FileDialog(shell, SWT.OPEN); String fileName = fileChooser.open(); if (fileName == null) { return; } // Load the image ImageLoader loader = new ImageLoader(); ImageData[] imageData = loader.load(fileName); if (imageData.length > 0) { // Show the Choose Printer dialog PrintDialog dialog = new PrintDialog(shell, SWT.NULL); PrinterData printerData = dialog.open(); if (printerData != null) { // Create the printer object Printer printer = new Printer(printerData); // Calculate the scale factor between the screen resolution and printer // resolution in order to correctly size the image for the printer Point screenDPI = display.getDPI(); Point printerDPI = printer.getDPI(); int scaleFactor = printerDPI.x / screenDPI.x; // Determine the bounds of the entire area of the printer Rectangle trim = printer.ruputeTrim(0, 0, 0, 0); // Start the print job if (printer.startJob(fileName)) { if (printer.startPage()) { GC gc = new GC(printer); Image printerImage = new Image(printer, imageData[0]); // Draw the image gc.drawImage(printerImage, 0, 0, imageData[0].width, imageData[0].height, -trim.x, -trim.y, scaleFactor * imageData[0].width, scaleFactor * imageData[0].height); // Clean up printerImage.dispose(); gc.dispose(); printer.endPage(); } } // End the job and dispose the printer printer.endJob(); printer.dispose(); } } } catch (Exception e) { MessageBox messageBox = new MessageBox(shell, SWT.ICON_ERROR); messageBox.setMessage("Error printing test image"); messageBox.open(); } }
}
</source>
Demonstrates printing text
<source lang="java">
//Send questions, comments, bug reports, etc. to the authors: //Rob Warner (rwarner@interspatial.ru) //Robert Harris (rbrt_harris@yahoo.ru) import org.eclipse.swt.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.printing.*; import org.eclipse.swt.widgets.*; import java.io.*; /**
* This class demonstrates printing text */
public class TextPrinterExample {
/** * Runs the application */ public void run() { Display display = new Display(); Shell shell = new Shell(display); // Get the file to print FileDialog fileChooser = new FileDialog(shell, SWT.OPEN); String fileName = fileChooser.open(); if (fileName != null) { // Have user select a printer PrintDialog dialog = new PrintDialog(shell); PrinterData printerData = dialog.open(); if (printerData != null) { // Create the printer Printer printer = new Printer(printerData); try { // Print the contents of the file new WrappingPrinter(printer, fileName, getFileContents(fileName)).print(); } catch (Exception e) { MessageBox mb = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK); mb.setMessage(e.getMessage()); mb.open(); } // Dispose the printer printer.dispose(); } } display.dispose(); } /** * Read in the file and return its contents * @param fileName * @return * @throws FileNotFoundException * @throws IOException */ private String getFileContents(String fileName) throws FileNotFoundException, IOException { StringBuffer contents = new StringBuffer(); BufferedReader reader = null; try { // Read in the file reader = new BufferedReader(new FileReader(fileName)); while (reader.ready()) { contents.append(reader.readLine()); contents.append("\n"); // Throw away LF chars, and just replace CR } } finally { if (reader != null) try { reader.close(); } catch (IOException e) {} } return contents.toString(); } /** * The application entry point * * @param args the command line arguments */ public static void main(String[] args) { new TextPrinterExample().run(); }
} /**
* This class performs the printing, wrapping text as necessary */
class WrappingPrinter {
private Printer printer; // The printer private String fileName; // The name of the file to print private String contents; // The contents of the file to print private GC gc; // The GC to print on private int xPos, yPos; // The current x and y locations for print private Rectangle bounds; // The boundaries for the print private StringBuffer buf; // Holds a word at a time private int lineHeight; // The height of a line of text /** * WrappingPrinter constructor * @param printer the printer * @param fileName the fileName * @param contents the contents */ WrappingPrinter(Printer printer, String fileName, String contents) { this.printer = printer; this.fileName = fileName; this.contents = contents; } /** * Prints the file */ void print() { // Start the print job if (printer.startJob(fileName)) { // Determine print area, with margins bounds = computePrintArea(printer); xPos = bounds.x; yPos = bounds.y; // Create the GC gc = new GC(printer); // Determine line height lineHeight = gc.getFontMetrics().getHeight(); // Determine tab width--use three spaces for tabs int tabWidth = gc.stringExtent(" ").x; // Print the text printer.startPage(); buf = new StringBuffer(); char c; for (int i = 0, n = contents.length(); i < n; i++) { // Get the next character c = contents.charAt(i); // Check for newline if (c == "\n") { printBuffer(); printNewline(); } // Check for tab else if (c == "\t") { xPos += tabWidth; } else { buf.append(c); // Check for space if (Character.isWhitespace(c)) { printBuffer(); } } } printer.endPage(); printer.endJob(); gc.dispose(); } } /** * Prints the contents of the buffer */ void printBuffer() { // Get the width of the rendered buffer int width = gc.stringExtent(buf.toString()).x; // Determine if it fits if (xPos + width > bounds.x + bounds.width) { // Doesn"t fit--wrap printNewline(); } // Print the buffer gc.drawString(buf.toString(), xPos, yPos, false); xPos += width; buf.setLength(0); } /** * Prints a newline */ void printNewline() { // Reset x and y locations to next line xPos = bounds.x; yPos += lineHeight; // Have we gone to the next page? if (yPos > bounds.y + bounds.height) { yPos = bounds.y; printer.endPage(); printer.startPage(); } } /** * Computes the print area, including margins * @param printer the printer * @return Rectangle */ Rectangle computePrintArea(Printer printer) { // Get the printable area Rectangle rect = printer.getClientArea(); // Compute the trim Rectangle trim = printer.ruputeTrim(0, 0, 0, 0); // Get the printer"s DPI Point dpi = printer.getDPI(); // Calculate the printable area, using 1 inch margins int left = trim.x + dpi.x; if (left < rect.x) left = rect.x; int right = (rect.width + trim.x + trim.width) - dpi.x; if (right > rect.width) right = rect.width; int top = trim.y + dpi.y; if (top < rect.y) top = rect.y; int bottom = (rect.height + trim.y + trim.height) - dpi.y; if (bottom > rect.height) bottom = rect.height; return new Rectangle(left, top, right - left, bottom - top); }
}
</source>
ImageViewer
<source lang="java">
/*******************************************************************************
* All Right Reserved. Copyright (c) 1998, 2004 Jackwind Li Guojie * * Created on 2004-5-2 14:57:37 by JACK $Id$ * ******************************************************************************/
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.widgets.Button; import org.eclipse.swt.widgets.rubo; import org.eclipse.swt.widgets.Dialog; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; 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.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.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 SWTImageViewer {
Display display = new Display(); Shell shell = new Shell(display); Canvas canvas; Image image; String fileName; public SWTImageViewer() { 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) { // e.printStackTrace(); } 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, "jexp.gif"); fileName = "scene.jpg"; shell.setSize(500, 400); shell.open(); //textUser.forceFocus(); // Set up the event loop. while (!shell.isDisposed()) { if (!display.readAndDispatch()) { // If no more entries in event queue display.sleep(); } } display.dispose(); } /** * Lets the user to select a printer and prints the image on it. * */ void print() { PrintDialog dialog = new PrintDialog(shell); // Prompts the printer dialog to let the user select a printer. PrinterData printerData = dialog.open(); if (printerData == null) // the user cancels the dialog return; // Loads the printer. Printer printer = new Printer(printerData); print(printer, null); } /** * Prints the image current displayed to the specified printer. * * @param printer */ void print(final Printer printer, PrintMargin printMargin) { if (image == null) // If no image is loaded, do not print. 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; // Handles DPI conversion. double dpiScaleFactorX = printerDPI.x * 1.0 / displayDPI.x; double dpiScaleFactorY = printerDPI.y * 1.0 / displayDPI.y; // If the image is too large to draw on a page, reduces its // width and height proportionally. 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)); // Draws the image to the printer. 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 SWTImageViewer(); }
} 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); // Prompts the printer dialog to let the user select a printer. PrinterData printerData = dialog.open(); if (printerData == null) // the user cancels the dialog return; // Loads the printer. 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)); // draws the page layout e.gc.fillRectangle( offsetX, offsetY, (int) (viewScaleFactor * rectangle.width), (int) (viewScaleFactor * rectangle.height)); // draws the margin. 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); // Set up the event loop. while (!shell.isDisposed()) { if (!shell.getDisplay().readAndDispatch()) { // If no more entries in event queue shell.getDisplay().sleep(); } } } /** * Sets target printer. * * @param printer */ void setPrinter(Printer printer, double marginSize) { if (printer == null) { printer = new Printer(Printer.getDefaultPrinterData()); } this.printer = printer; margin = PrintMargin.getPrintMargin(printer, marginSize); canvas.redraw(); }
} /**
* Contains margin information (in pixels) for a print job. * */
class PrintMargin {
// Margin to the left side, in pixels public int left; // Margins to the right side, in pixels public int right; // Margins to the top side, in pixels public int top; // Margins to the bottom side, in pixels 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; } /** * Returns a PrintMargin object containing the true border margins for the * specified printer with the given margin in inches. * Note: all four sides share the same margin width. * @param printer * @param margin * @return */ static PrintMargin getPrintMargin(Printer printer, double margin) { return getPrintMargin(printer, margin, margin, margin, margin); } /** * Returns a PrintMargin object containing the true border margins for the * specified printer with the given margin width (in inches) for each side. */ static PrintMargin getPrintMargin( Printer printer, double marginLeft, double marginRight, double marginTop, double marginBottom) { Rectangle clientArea = printer.getClientArea(); Rectangle trim = printer.ruputeTrim(0, 0, 0, 0); //System.out.println(printer.getBounds() + " - " + clientArea + "" + // trim); 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 + " }"; }
}
</source>
Print Hello World in black, outlined in red, to default printer
<source lang="java">
/*
* Printing example snippet: print "Hello World!" in black, outlined in red, to default printer * * For a list of all SWT example snippets see * http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets */
import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.printing.Printer; import org.eclipse.swt.printing.PrinterData; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class Snippet132 {
public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.open(); PrinterData data = Printer.getDefaultPrinterData(); if (data == null) { System.out.println("Warning: No default printer."); return; } Printer printer = new Printer(data); if (printer.startJob("SWT Printing Snippet")) { Color black = printer.getSystemColor(SWT.COLOR_BLACK); Color white = printer.getSystemColor(SWT.COLOR_WHITE); Color red = printer.getSystemColor(SWT.COLOR_RED); Rectangle trim = printer.ruputeTrim(0, 0, 0, 0); Point dpi = printer.getDPI(); int leftMargin = dpi.x + trim.x; // one inch from left side of // paper int topMargin = dpi.y / 2 + trim.y; // one-half inch from top edge // of paper GC gc = new GC(printer); Font font = gc.getFont(); // example just uses printer"s default // font if (printer.startPage()) { gc.setBackground(white); gc.setForeground(black); String testString = "Hello World!"; Point extent = gc.stringExtent(testString); gc.drawString(testString, leftMargin, topMargin + font.getFontData()[0].getHeight()); gc.setForeground(red); gc.drawRectangle(leftMargin, topMargin, extent.x, extent.y); printer.endPage(); } gc.dispose(); printer.endJob(); } printer.dispose(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); }
}
</source>
Printing Example
<source lang="java">
/******************************************************************************
* All Right Reserved. * Copyright (c) 1998, 2004 Jackwind Li Guojie * * Created on 2004-5-2 11:03:19 by JACK * $Id$ * *****************************************************************************/
/*
* Printing example snippet: print text to printer, with word wrap and pagination * * For a list of all SWT example snippets see * http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets */
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.jface.window.WindowManager; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.custom.StyledTextPrintOptions; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.printing.PrintDialog; import org.eclipse.swt.printing.Printer; import org.eclipse.swt.printing.PrinterData; import org.eclipse.swt.widgets.ColorDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.FontDialog; 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.Text; public class PrintingExample {
ApplicationWindow applicationWindow; WindowManager manager; StyledTextPrintOptions styledTextPrintOptions; StyledText styledText; Display display; Shell shell; Text text; Font font; Color foregroundColor, backgroundColor; Printer printer; GC gc; Font printerFont; Color printerForegroundColor, printerBackgroundColor; int lineHeight = 0; int tabWidth = 0; int leftMargin, rightMargin, topMargin, bottomMargin; int x, y; int index, end; String textToPrint; String tabs; StringBuffer wordBuffer; public static void main(String[] args) { new PrintingExample().open(); } void open() { display = new Display(); font = new Font(display, "Courier", 10, SWT.NORMAL); foregroundColor = display.getSystemColor(SWT.COLOR_BLACK); backgroundColor = display.getSystemColor(SWT.COLOR_WHITE); shell = new Shell(display); shell.setLayout(new FillLayout()); shell.setText("Print Text"); shell.setMaximized(true); text = new Text(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL); text.setFont(font); text.setForeground(foregroundColor); text.setBackground(backgroundColor); Menu menuBar = new Menu(shell, SWT.BAR); shell.setMenuBar(menuBar); MenuItem item = new MenuItem(menuBar, SWT.CASCADE); item.setText("&File"); Menu fileMenu = new Menu(shell, SWT.DROP_DOWN); item.setMenu(fileMenu); item = new MenuItem(fileMenu, SWT.PUSH); item.setText("&Open..."); item.setAccelerator(SWT.CTRL + "O"); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { menuOpen(); } }); item = new MenuItem(fileMenu, SWT.PUSH); item.setText("Font..."); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { menuFont(); } }); item = new MenuItem(fileMenu, SWT.PUSH); item.setText("Foreground Color..."); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { menuForegroundColor(); } }); item = new MenuItem(fileMenu, SWT.PUSH); item.setText("Background Color..."); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { menuBackgroundColor(); } }); item = new MenuItem(fileMenu, SWT.PUSH); item.setText("&Print..."); item.setAccelerator(SWT.CTRL + "P"); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { menuPrint(); } }); new MenuItem(fileMenu, SWT.SEPARATOR); item = new MenuItem(fileMenu, SWT.PUSH); item.setText("E&xit"); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { System.exit(0); } }); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } if (font != null) font.dispose(); if (foregroundColor != null) foregroundColor.dispose(); if (backgroundColor != null) backgroundColor.dispose(); } void menuOpen() { final String textString; FileDialog dialog = new FileDialog(shell, SWT.OPEN); dialog.setFilterExtensions(new String[] {"*.java", "*.*"}); String name = dialog.open(); if ((name == null) || (name.length() == 0)) return; try { File file = new File(name); FileInputStream stream= new FileInputStream(file.getPath()); try { Reader in = new BufferedReader(new InputStreamReader(stream)); char[] readBuffer= new char[2048]; StringBuffer buffer= new StringBuffer((int) file.length()); int n; while ((n = in.read(readBuffer)) > 0) { buffer.append(readBuffer, 0, n); } textString = buffer.toString(); stream.close(); } catch (IOException e) { MessageBox box = new MessageBox(shell, SWT.ICON_ERROR); box.setMessage("Error reading file:\n" + name); box.open(); return; } } catch (FileNotFoundException e) { MessageBox box = new MessageBox(shell, SWT.ICON_ERROR); box.setMessage("File not found:\n" + name); box.open(); return; } text.setText(textString); } void menuFont() { FontDialog fontDialog = new FontDialog(shell); fontDialog.setFontList(font.getFontData()); FontData fontData = fontDialog.open(); if (fontData != null) { if (font != null) font.dispose(); font = new Font(display, fontData); text.setFont(font); } } void menuForegroundColor() { ColorDialog colorDialog = new ColorDialog(shell); colorDialog.setRGB(foregroundColor.getRGB()); RGB rgb = colorDialog.open(); if (rgb != null) { if (foregroundColor != null) foregroundColor.dispose(); foregroundColor = new Color(display, rgb); text.setForeground(foregroundColor); } } void menuBackgroundColor() { ColorDialog colorDialog = new ColorDialog(shell); colorDialog.setRGB(backgroundColor.getRGB()); RGB rgb = colorDialog.open(); if (rgb != null) { if (backgroundColor != null) backgroundColor.dispose(); backgroundColor = new Color(display, rgb); text.setBackground(backgroundColor); } } void menuPrint() { PrintDialog dialog = new PrintDialog(shell, SWT.NULL); PrinterData data = dialog.open(); if (data == null) return; if (data.printToFile) { data.fileName = "print.out"; // you probably want to ask the user for a filename } /* Get the text to print from the Text widget (you could get it from anywhere, i.e. your java model) */ textToPrint = text.getText(); /* Do the printing in a background thread so that spooling does not freeze the UI. */ printer = new Printer(data); Thread printingThread = new Thread("Printing") { public void run() { print(printer); printer.dispose(); } }; printingThread.start(); } void print(Printer printer) { if (printer.startJob("Text")) { // the string is the job name - shows up in the printer"s job list Rectangle clientArea = printer.getClientArea(); Rectangle trim = printer.ruputeTrim(0, 0, 0, 0); Point dpi = printer.getDPI(); leftMargin = dpi.x + trim.x; // one inch from left side of paper rightMargin = clientArea.width - dpi.x + trim.x + trim.width; // one inch from right side of paper topMargin = dpi.y + trim.y; // one inch from top edge of paper bottomMargin = clientArea.height - dpi.y + trim.y + trim.height; // one inch from bottom edge of paper /* Create a buffer for computing tab width. */ int tabSize = 4; // is tab width a user setting in your UI? StringBuffer tabBuffer = new StringBuffer(tabSize); for (int i = 0; i < tabSize; i++) tabBuffer.append(" "); tabs = tabBuffer.toString(); /* Create printer GC, and create and set the printer font & foreground color. */ gc = new GC(printer); FontData fontData = font.getFontData()[0]; printerFont = new Font(printer, fontData.getName(), fontData.getHeight(), fontData.getStyle()); gc.setFont(printerFont); tabWidth = gc.stringExtent(tabs).x; lineHeight = gc.getFontMetrics().getHeight(); RGB rgb = foregroundColor.getRGB(); printerForegroundColor = new Color(printer, rgb); gc.setForeground(printerForegroundColor); rgb = backgroundColor.getRGB(); printerBackgroundColor = new Color(printer, rgb); gc.setBackground(printerBackgroundColor); /* Print text to current gc using word wrap */ printText(); printer.endJob(); /* Cleanup graphics resources used in printing */ printerFont.dispose(); printerForegroundColor.dispose(); printerBackgroundColor.dispose(); gc.dispose(); } } void printText() { printer.startPage(); wordBuffer = new StringBuffer(); x = leftMargin; y = topMargin; index = 0; end = textToPrint.length(); while (index < end) { char c = textToPrint.charAt(index); index++; if (c != 0) { if (c == 0x0a || c == 0x0d) { if (c == 0x0d && index < end && textToPrint.charAt(index) == 0x0a) { index++; // if this is cr-lf, skip the lf } printWordBuffer(); newline(); } else { if (c != "\t") { wordBuffer.append(c); } if (Character.isWhitespace(c)) { printWordBuffer(); if (c == "\t") { x += tabWidth; } } } } } if (y + lineHeight <= bottomMargin) { printer.endPage(); } } void printWordBuffer() { if (wordBuffer.length() > 0) { String word = wordBuffer.toString(); int wordWidth = gc.stringExtent(word).x; if (x + wordWidth > rightMargin) { /* word doesn"t fit on current line, so wrap */ newline(); } gc.drawString(word, x, y, false); x += wordWidth; wordBuffer = new StringBuffer(); } } void newline() { x = leftMargin; y += lineHeight; if (y + lineHeight > bottomMargin) { printer.endPage(); if (index + 1 < end) { y = topMargin; printer.startPage(); } } }
}
</source>
Print text to printer, with word wrap and pagination
<source lang="java">
/*
* Printing example snippet: print text to printer, with word wrap and pagination * * For a list of all SWT example snippets see * http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/dev.html#snippets */
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.printing.PrintDialog; import org.eclipse.swt.printing.Printer; import org.eclipse.swt.printing.PrinterData; import org.eclipse.swt.widgets.ColorDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.FontDialog; 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.Text; public class Snippet133 {
Display display; Shell shell; Text text; Font font; Color foregroundColor, backgroundColor; Printer printer; GC gc; Font printerFont; Color printerForegroundColor, printerBackgroundColor; int lineHeight = 0; int tabWidth = 0; int leftMargin, rightMargin, topMargin, bottomMargin; int x, y; int index, end; String textToPrint; String tabs; StringBuffer wordBuffer; public static void main(String[] args) { new Snippet133().open(); } void open() { display = new Display(); font = new Font(display, "Courier", 10, SWT.NORMAL); foregroundColor = display.getSystemColor(SWT.COLOR_BLACK); backgroundColor = display.getSystemColor(SWT.COLOR_WHITE); shell = new Shell(display); shell.setLayout(new FillLayout()); shell.setText("Print Text"); shell.setMaximized(true); text = new Text(shell, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL); text.setFont(font); text.setForeground(foregroundColor); text.setBackground(backgroundColor); Menu menuBar = new Menu(shell, SWT.BAR); shell.setMenuBar(menuBar); MenuItem item = new MenuItem(menuBar, SWT.CASCADE); item.setText("&File"); Menu fileMenu = new Menu(shell, SWT.DROP_DOWN); item.setMenu(fileMenu); item = new MenuItem(fileMenu, SWT.PUSH); item.setText("&Open..."); item.setAccelerator(SWT.CTRL + "O"); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { menuOpen(); } }); item = new MenuItem(fileMenu, SWT.PUSH); item.setText("Font..."); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { menuFont(); } }); item = new MenuItem(fileMenu, SWT.PUSH); item.setText("Foreground Color..."); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { menuForegroundColor(); } }); item = new MenuItem(fileMenu, SWT.PUSH); item.setText("Background Color..."); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { menuBackgroundColor(); } }); item = new MenuItem(fileMenu, SWT.PUSH); item.setText("&Print..."); item.setAccelerator(SWT.CTRL + "P"); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { menuPrint(); } }); new MenuItem(fileMenu, SWT.SEPARATOR); item = new MenuItem(fileMenu, SWT.PUSH); item.setText("E&xit"); item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { System.exit(0); } }); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } if (font != null) font.dispose(); if (foregroundColor != null) foregroundColor.dispose(); if (backgroundColor != null) backgroundColor.dispose(); } void menuOpen() { final String textString; FileDialog dialog = new FileDialog(shell, SWT.OPEN); dialog.setFilterExtensions(new String[] { "*.java", "*.*" }); String name = dialog.open(); if ((name == null) || (name.length() == 0)) return; try { File file = new File(name); FileInputStream stream = new FileInputStream(file.getPath()); try { Reader in = new BufferedReader(new InputStreamReader(stream)); char[] readBuffer = new char[2048]; StringBuffer buffer = new StringBuffer((int) file.length()); int n; while ((n = in.read(readBuffer)) > 0) { buffer.append(readBuffer, 0, n); } textString = buffer.toString(); stream.close(); } catch (IOException e) { MessageBox box = new MessageBox(shell, SWT.ICON_ERROR); box.setMessage("Error reading file:\n" + name); box.open(); return; } } catch (FileNotFoundException e) { MessageBox box = new MessageBox(shell, SWT.ICON_ERROR); box.setMessage("File not found:\n" + name); box.open(); return; } text.setText(textString); } void menuFont() { FontDialog fontDialog = new FontDialog(shell); fontDialog.setFontList(font.getFontData()); FontData fontData = fontDialog.open(); if (fontData != null) { if (font != null) font.dispose(); font = new Font(display, fontData); text.setFont(font); } } void menuForegroundColor() { ColorDialog colorDialog = new ColorDialog(shell); colorDialog.setRGB(foregroundColor.getRGB()); RGB rgb = colorDialog.open(); if (rgb != null) { if (foregroundColor != null) foregroundColor.dispose(); foregroundColor = new Color(display, rgb); text.setForeground(foregroundColor); } } void menuBackgroundColor() { ColorDialog colorDialog = new ColorDialog(shell); colorDialog.setRGB(backgroundColor.getRGB()); RGB rgb = colorDialog.open(); if (rgb != null) { if (backgroundColor != null) backgroundColor.dispose(); backgroundColor = new Color(display, rgb); text.setBackground(backgroundColor); } } void menuPrint() { PrintDialog dialog = new PrintDialog(shell, SWT.NONE); PrinterData data = dialog.open(); if (data == null) return; if (data.printToFile) { data.fileName = "print.out"; // you probably want to ask the user // for a filename } /* * Get the text to print from the Text widget (you could get it from * anywhere, i.e. your java model) */ textToPrint = text.getText(); /* * Do the printing in a background thread so that spooling does not * freeze the UI. */ printer = new Printer(data); Thread printingThread = new Thread("Printing") { public void run() { print(printer); printer.dispose(); } }; printingThread.start(); } void print(Printer printer) { if (printer.startJob("Text")) { // the string is the job name - shows up // in the printer"s job list Rectangle clientArea = printer.getClientArea(); Rectangle trim = printer.ruputeTrim(0, 0, 0, 0); Point dpi = printer.getDPI(); leftMargin = dpi.x + trim.x; // one inch from left side of paper rightMargin = clientArea.width - dpi.x + trim.x + trim.width; // one // inch // from // right // side // of // paper topMargin = dpi.y + trim.y; // one inch from top edge of paper bottomMargin = clientArea.height - dpi.y + trim.y + trim.height; // one // inch // from // bottom // edge // of // paper /* Create a buffer for computing tab width. */ int tabSize = 4; // is tab width a user setting in your UI? StringBuffer tabBuffer = new StringBuffer(tabSize); for (int i = 0; i < tabSize; i++) tabBuffer.append(" "); tabs = tabBuffer.toString(); /* * Create printer GC, and create and set the printer font & * foreground color. */ gc = new GC(printer); FontData fontData = font.getFontData()[0]; printerFont = new Font(printer, fontData.getName(), fontData .getHeight(), fontData.getStyle()); gc.setFont(printerFont); tabWidth = gc.stringExtent(tabs).x; lineHeight = gc.getFontMetrics().getHeight(); RGB rgb = foregroundColor.getRGB(); printerForegroundColor = new Color(printer, rgb); gc.setForeground(printerForegroundColor); rgb = backgroundColor.getRGB(); printerBackgroundColor = new Color(printer, rgb); gc.setBackground(printerBackgroundColor); /* Print text to current gc using word wrap */ printText(); printer.endJob(); /* Cleanup graphics resources used in printing */ printerFont.dispose(); printerForegroundColor.dispose(); printerBackgroundColor.dispose(); gc.dispose(); } } void printText() { printer.startPage(); wordBuffer = new StringBuffer(); x = leftMargin; y = topMargin; index = 0; end = textToPrint.length(); while (index < end) { char c = textToPrint.charAt(index); index++; if (c != 0) { if (c == 0x0a || c == 0x0d) { if (c == 0x0d && index < end && textToPrint.charAt(index) == 0x0a) { index++; // if this is cr-lf, skip the lf } printWordBuffer(); newline(); } else { if (c != "\t") { wordBuffer.append(c); } if (Character.isWhitespace(c)) { printWordBuffer(); if (c == "\t") { x += tabWidth; } } } } } if (y + lineHeight <= bottomMargin) { printer.endPage(); } } void printWordBuffer() { if (wordBuffer.length() > 0) { String word = wordBuffer.toString(); int wordWidth = gc.stringExtent(word).x; if (x + wordWidth > rightMargin) { /* word doesn"t fit on current line, so wrap */ newline(); } gc.drawString(word, x, y, false); x += wordWidth; wordBuffer = new StringBuffer(); } } void newline() { x = leftMargin; y += lineHeight; if (y + lineHeight > bottomMargin) { printer.endPage(); if (index + 1 < end) { y = topMargin; printer.startPage(); } } }
}
</source>
Simple Print
<source lang="java">
/******************************************************************************
* All Right Reserved. * Copyright (c) 1998, 2004 Jackwind Li Guojie * * Created on 2004-5-2 21:35:30 by JACK * $Id$ * *****************************************************************************/
import org.eclipse.swt.graphics.GC; import org.eclipse.swt.printing.PrintDialog; import org.eclipse.swt.printing.Printer; import org.eclipse.swt.printing.PrinterData; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class SimplePrint {
Display display = new Display(); Shell shell = new Shell(display); public SimplePrint() { shell.pack(); shell.open(); PrintDialog dialog = new PrintDialog(shell); // Opens a dialog and let use user select the // target printer and configure various settings. PrinterData printerData = dialog.open(); if(printerData != null) { // If a printer is selected // Creates a printer. Printer printer = new Printer(printerData); // Starts the print job. if(printer.startJob("Text")) { GC gc = new GC(printer); // Starts a new page. if(printer.startPage()) { gc.drawString("Eclipse", 200, 200); // Finishes the page. printer.endPage(); } gc.dispose(); // Ends the job. printer.endJob(); } // Disposes the printer object after use. printer.dispose(); System.out.println("Print job done."); } // Set up the event loop. while (!shell.isDisposed()) { if (!display.readAndDispatch()) { // If no more entries in event queue display.sleep(); } } display.dispose(); } private void init() { } public static void main(String[] args) { new SimplePrint(); }
}
</source>
SWT Print and 2D Graphics
<source lang="java">
/*******************************************************************************
* Copyright (c) 2004 Berthold Daum. All rights reserved. This program and the * accompanying materials are made available under the terms of the Common * Public License v1.0 which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: Berthold Daum ******************************************************************************/
import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.custom.StackLayout; import org.eclipse.swt.events.ArmEvent; import org.eclipse.swt.events.ArmListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; 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.ruposite; import org.eclipse.swt.widgets.CoolBar; import org.eclipse.swt.widgets.CoolItem; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; public class widgetTest3 {
public static void main(String[] args) { // Create display instance final Display display = new Display(); // Create top level shell (pass display as parent) final Shell toplevelShell = new Shell(display); // Set title toplevelShell.setText("TopLevel.Titelzeile"); // Fill the shell completely with content toplevelShell.setLayout(new FillLayout()); // Create tabbed folder TabFolder folder = new TabFolder(toplevelShell, SWT.NONE); // Protocol selection event folder.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { System.out.println("Tab selected: " + ((TabItem) (e.item)).getText()); } }); // Fill tabbed folder completely with content folder.setLayout(new FillLayout()); Composite page1 = createTabPage(folder, "tab1"); // We can now place more GUI elements onto page1 //... Composite page2 = createTabPage(folder, "tab2"); // We can now place more GUI elements onto page2 //... // Display shell toplevelShell.open(); // Event loop while (!toplevelShell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } } private static Composite createTabPage(TabFolder folder, String label) { // Create and label a new tab TabItem tab = new TabItem(folder, SWT.NONE); tab.setText(label); // Create a new page as a Composite instance Composite page = new Composite(folder, SWT.NONE); //... and assign to tab tab.setControl(page); return page; } /** * Menu ** */ public static Menu createMenu(final Shell toplevelShell) { // Menuleiste anlegen Menu menuBar = new Menu(toplevelShell, SWT.BAR); toplevelShell.setMenuBar(menuBar); // Menutitel anlegen MenuItem fileTitle = new MenuItem(menuBar, SWT.CASCADE); fileTitle.setText("File"); // Untermenu fur diesen Menutitel anlegen Menu fileMenu = new Menu(toplevelShell, SWT.DROP_DOWN); fileTitle.setMenu(fileMenu); // Menueintrag anlegen MenuItem item = new MenuItem(fileMenu, SWT.NULL); item.setText("Exit"); // Ereignisverarbeitung fur Menueintrag item.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { toplevelShell.close(); } }); return menuBar; } /** * Coolbar ** */ public CoolBar createCoolBar(Composite composite) { // Create CoolBar final CoolBar coolbar = new CoolBar(composite, SWT.NULL); // Create ToolBar as a component of CoolBar final ToolBar toolbar1 = new ToolBar(coolbar, SWT.NULL); // Create pushbutton final ToolItem toolitem1 = new ToolItem(toolbar1, SWT.PUSH); toolitem1.setText("Push"); toolitem1.setToolTipText("Push button"); // Create event processing for pushbutton toolitem1.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { System.out.println("Tool button was pressed: " + toolitem1.getText()); } }); // Create check button final ToolItem toolitem2 = new ToolItem(toolbar1, SWT.CHECK); toolitem2.setText("Check"); toolitem2.setToolTipText("Check button"); // Create CoolItem instance final CoolItem coolitem1 = new CoolItem(coolbar, SWT.NULL); // Assign this tool bar to the CoolItem instance coolitem1.setControl(toolbar1); // Compute size of tool bar Point size = toolbar1.ruputeSize(SWT.DEFAULT, SWT.DEFAULT); // Compute required size of CoolItems instance size = coolitem1.ruputeSize(size.x, size.y); // Set size for this CoolItem instance coolitem1.setSize(size); // The minimum size of the CoolItem is the width of the first button coolitem1.setMinimumSize(toolitem1.getWidth(), size.y); // Create second ToolBar instance final ToolBar toolbar2 = new ToolBar(coolbar, SWT.NULL); // Create two radio buttons final ToolItem toolitem3a = new ToolItem(toolbar2, SWT.RADIO); toolitem3a.setText("Radio"); toolitem3a.setToolTipText("Radio button a"); final ToolItem toolitem3b = new ToolItem(toolbar2, SWT.RADIO); toolitem3b.setText("Radio"); toolitem3b.setToolTipText("Radio button b"); // Create separator new ToolItem(toolbar2, SWT.SEPARATOR); // Create drop-down menu button final ToolItem toolitem5 = new ToolItem(toolbar2, SWT.DROP_DOWN); toolitem5.setText("Drop-down-Menu"); // Add event processing to drop-down menu button toolitem5.addSelectionListener( // In class DropDownSelectionListener we construct the menu new DropDownSelectionListener(composite.getShell())); // Create second CoolItem, assing Toolbar to it and set size final CoolItem coolitem2 = new CoolItem(coolbar, SWT.NULL); coolitem2.setControl(toolbar2); size = toolbar2.ruputeSize(SWT.DEFAULT, SWT.DEFAULT); size = coolitem2.ruputeSize(size.x, size.y); coolitem2.setSize(size); coolitem2.setMinimumSize(toolitem3a.getWidth(), size.y); return coolbar; } class DropDownSelectionListener extends SelectionAdapter { private Menu menu; private Composite parent; public DropDownSelectionListener(Composite parent) { this.parent = parent; } public void widgetSelected(final SelectionEvent e) { // Create menu lazily if (menu == null) { menu = new Menu(parent); final MenuItem menuItem1 = new MenuItem(menu, SWT.NULL); menuItem1.setText("Item1"); // Set SelectionListener for menuItem1 menuItem1.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent m) { processMenuEvent(e, menuItem1); } }); menuItem1.addArmListener(new ArmListener() { public void widgetArmed(ArmEvent m) { System.out.println("Mouse is over menu item 1"); } }); final MenuItem menuItem2 = new MenuItem(menu, SWT.NULL); menuItem2.setText("Item2"); // Set SelectionListener foYr menuItem1 menuItem2.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent m) { processMenuEvent(e, menuItem2); } }); menuItem2.addArmListener(new ArmListener() { public void widgetArmed(ArmEvent m) { System.out.println("Mouse is over menu item 2"); } }); } // Check, if it was the arrow button that was pressed if (e.detail == SWT.ARROW) { if (menu.isVisible()) { // Set visible menu invisible menu.setVisible(false); } else { // Retrieve ToolItem and ToolBar from the event object final ToolItem toolItem = (ToolItem) e.widget; final ToolBar toolBar = toolItem.getParent(); // Get position and size of the ToolItem Rectangle toolItemBounds = toolItem.getBounds(); // Convert relative position to absolute position Point point = toolBar.toDisplay(new Point(toolItemBounds.x, toolItemBounds.y)); // Set menu position menu.setLocation(point.x, point.y + toolItemBounds.height); // Make menu visible menu.setVisible(true); } } else { final ToolItem toolItem = (ToolItem) e.widget; System.out.println("Tool button was pressed: " + toolItem.getText()); } } private void processMenuEvent(final SelectionEvent e, final MenuItem item) { // Get text of menu item final String s = item.getText(); // Get ToolItem final ToolItem toolItem = (ToolItem) e.widget; // Replace ToolItem label with text of the menu item toolItem.setText(s); // Hide menu menu.setVisible(false); } } /** * SashForm ** */ public static SashForm createSashForm(Shell toplevelShell) { // Create outer SashForm SashForm sf1 = new SashForm(toplevelShell, SWT.HORIZONTAL); // Create inner SashForm SashForm sf2 = new SashForm(sf1, SWT.VERTICAL); // Create content for vertical SashForm List list1 = new List(sf2, SWT.NONE); list1.setItems(new String[] { "red", "green", "blue" }); List list2 = new List(sf2, SWT.NONE); list2.setItems(new String[] { "A", "B", "C" }); // Apply even weights sf2.setWeights(new int[] { 100, 100 }); // Create content for horizontal SashForm List list3 = new List(sf1, SWT.NONE); list3.setItems(new String[] { "one", "two", "three", "four", "five", "six" }); // Apply uneven weights sf1.setWeights(new int[] { 100, 200 }); return sf1; } /** * StackLayout ** */ public static void createStackLayout(Composite composite) { // Neues Composite erzeugen final Composite stackComposite = new Composite(composite, SWT.NULL); final StackLayout stackLayout = new StackLayout(); // Text-Buttons erzeugen final Button buttonA = new Button(stackComposite, SWT.PUSH); buttonA.setText("Taste A"); final Button buttonB = new Button(stackComposite, SWT.PUSH); buttonB.setText("Taste B"); // Auf Klickereignisse reagieren buttonA.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { stackLayout.topControl = buttonB; // Neues Layout erzwingen stackComposite.layout(); // Fokus auf sichtbare Taste setzen buttonB.setFocus(); } }); buttonB.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { stackLayout.topControl = buttonA; // Neues Layout erzwingen stackComposite.layout(); // Fokus auf sichtbare Taste setzen buttonA.setFocus(); } }); // Layout initialisieren stackLayout.topControl = buttonA; stackLayout.marginWidth = 10; stackLayout.marginHeight = 5; // Layout setzen stackComposite.setLayout(stackLayout); } /** * PaintListener ** */ public static void addPaintListener(Composite composite) { composite.addPaintListener(new PaintListener() { public void paintControl(PaintEvent event) { // Get Display intsance from event object Display display = event.display; // Get a green system color object - we don"t // need to dispose that Color green = display.getSystemColor(SWT.COLOR_DARK_GREEN); // Get the graphics context from the event object GC gc = event.gc; // Set line color gc.setForeground(green); // Get size of the Composite"s client area Rectangle rect = ((Composite) event.widget).getClientArea(); // Now draw an rectangle gc.drawRectangle(rect.x + 2, rect.y + 2, rect.width - 4, rect.height - 4); } }); } /** * Fonts ** */ public static void drawItalic(Composite composite, GC gc) { // Get Display instance Display display = composite.getDisplay(); // Fetch system font Font systemFont = display.getSystemFont(); // FontData objects contain the font properties. // With some operating systems a font may possess multiple // FontData instances. We only use the first one. FontData[] data = systemFont.getFontData(); FontData data0 = data[0]; // Set the font style to italic data0.setStyle(SWT.ITALIC); // Create a new font Font italicFont = new Font(display, data0); // Set the new font in the graphics context gc.setFont(italicFont); // TODO: call italicFont.dispose() in the DisposeListener // of composite // Draw text at position (4,4) with a transparent background (true). gc.drawText("Hello", 4, 4, true); } /** * Images ** */ public static void doubleBuffering(Composite composite) { // Create canvas final Canvas canvas = new Canvas(composite, SWT.BORDER); // Get white system color Color white = canvas.getDisplay().getSystemColor(SWT.COLOR_WHITE); // Set canvas background to white canvas.setBackground(white); // Add paint listener canvas.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { // Get Display instance from the event object Display display = e.display; // Get black and red system color - don"t dispose these Color black = display.getSystemColor(SWT.COLOR_BLACK); Color red = display.getSystemColor(SWT.COLOR_RED); // Get the graphics context from event object GC gc = e.gc; // Get the widget that caused the event Composite source = (Composite) e.widget; // Get the size of this widgets client area Rectangle rect = source.getClientArea(); // Create buffer for double buffering Image buffer = new Image(display, rect.width, rect.height); // Create graphics context for this buffer GC bufferGC = new GC(buffer); // perform drawing operations bufferGC.setBackground(red); bufferGC.fillRectangle(5, 5, rect.width - 10, rect.height - 10); bufferGC.setForeground(black); bufferGC.drawRectangle(5, 5, rect.width - 10, rect.height - 10); bufferGC.setBackground(source.getBackground()); bufferGC.fillRectangle(10, 10, rect.width - 20, rect.height - 20); // Now draw the buffered image to the target drawable gc.drawImage(buffer, 0, 0); // Dispose of the buffer"s graphics context bufferGC.dispose(); // Dispose of the buffer buffer.dispose(); } }); } /** * Printing ** */ public static void createPrintButton(final Composite composite) { // Create button for starting printing process final Button printButton = new Button(composite, SWT.PUSH); printButton.setText("Print"); // React to clicks printButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { // Get Shell instance Shell shell = composite.getShell(); // Create printer selection dialog PrintDialog printDialog = new PrintDialog(shell); // and open it PrinterData printerData = printDialog.open(); // Check if OK was pressed if (printerData != null) { // Create new Printer instance Printer printer = new Printer(printerData); // Create graphics context for this printer GC gc = new GC(printer); // Open printing task if (!printer.startJob("Hello")) System.out.println("Starting printer task failed"); else { // Print first page if (!printer.startPage()) System.out.println("Printing of page 1 failed"); else { // Get green system color from printer // and set it as text color Color green = printer .getSystemColor(SWT.COLOR_DARK_GREEN); gc.setForeground(green); // Draw text gc.drawText("Hello World", 4, 4, true); // Close page printer.endPage(); } // Print second page if (!printer.startPage()) System.out.println("Printing of page 2 failed"); else { // Get blue system color from printer // and set it as text color Color blue = printer.getSystemColor(SWT.COLOR_BLUE); gc.setForeground(blue); // Draw text gc.drawText("Hello Eclipse", 4, 4, true); // Close page printer.endPage(); } // Close printing task printer.endJob(); } // Release operating system resources gc.dispose(); printer.dispose(); } } }); }
}
</source>