SWT打印和2D图形 : 打印 « SWT-JFace-Eclipse « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » SWT-JFace-Eclipse » 打印屏幕截图 
SWT打印和2D图形
SWT打印和2D图形

/*******************************************************************************
 * 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.Composite;
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.computeSize(SWT.DEFAULT, SWT.DEFAULT);
    //     Compute required size of CoolItems instance
    size = coolitem1.computeSize(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.computeSize(SWT.DEFAULT, SWT.DEFAULT);
    size = coolitem2.computeSize(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 = (ToolIteme.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 = (ToolIteme.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 = (ToolIteme.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[] { 100100 });
    //     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[] { 100200 });
    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 = ((Compositeevent.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"44true);
  }

  /** * 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 = (Compositee.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(55, rect.width - 10, rect.height - 10);
        bufferGC.setForeground(black);
        bufferGC.drawRectangle(55, rect.width - 10, rect.height - 10);
        bufferGC.setBackground(source.getBackground());
        bufferGC.fillRectangle(1010, rect.width - 20,
            rect.height - 20);
        // Now draw the buffered image to the target drawable
        gc.drawImage(buffer, 00);
        // 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"44true);
              // 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"44true);
              // Close page
              printer.endPage();
            }
            // Close printing task
            printer.endJob();
          }
          // Release operating system resources
          gc.dispose();
          printer.dispose();
        }
      }
    });
  }
}


           
       
Related examples in the same category
1. Print KTable (SWT Table)Example Print KTable (SWT Table)Example
2. 简单打印简单打印
3. 印刷为例印刷为例
4. ImageViewer演示ImageViewer演示
5. 演示印刷文字
6. 演示印刷图像
7. 打印文本到打印机,自动换行和分页打印文本到打印机,自动换行和分页
8. Print Hello World in black, outlined in red, to default printerPrint Hello World in black, outlined in red, to default printer
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.