涂鸦 : 打印 « 图形用户界面 « 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 » 图形用户界面 » 打印屏幕截图 
涂鸦
涂鸦
  
/*
 * Copyright (c) 2000 David Flanagan.  All rights reserved.
 * This code is from the book Java Examples in a Nutshell, 2nd Edition.
 * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.
 * You may study, use, and modify it for any non-commercial purpose.
 * You may distribute it non-commercially as long as you retain this notice.
 * For a commercial use license, or to purchase the book (recommended),
 * visit http://www.davidflanagan.com/javaexamples2.
 */

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import javax.swing.border.BevelBorder;

/**
 * This JFrame subclass is a simple "paint" application.
 */
public class Scribble extends JFrame {
  /**
   * The main method instantiates an instance of the class, sets it size, and
   * makes it visible on the screen
   */
  public static void main(String[] args) {
    Scribble scribble = new Scribble();
    scribble.setSize(500300);
    scribble.setVisible(true);
  }

  // The scribble application relies on the ScribblePane2 component developed
  // earlier. This field holds the ScribblePane2 instance it uses.
  ScribblePane2 scribblePane;

  /**
   * This constructor creates the GUI for this application.
   */
  public Scribble() {
    super("Scribble")// Call superclass constructor and set window title

    // Handle window close requests
    this.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });

    // All content of a JFrame (except for the menubar) goes in the
    // Frame's internal "content pane", not in the frame itself.
    // The same is true for JDialog and similar top-level containers.
    Container contentPane = this.getContentPane();

    // Specify a layout manager for the content pane
    contentPane.setLayout(new BorderLayout());

    // Create the main scribble pane component, give it a border, and
    // a background color, and add it to the content pane
    scribblePane = new ScribblePane2();
    scribblePane.setBorder(new BevelBorder(BevelBorder.LOWERED));
    scribblePane.setBackground(Color.white);
    contentPane.add(scribblePane, BorderLayout.CENTER);

    // Create a menubar and add it to this window. Note that JFrame
    // handles menus specially and has a special method for adding them
    // outside of the content pane.
    JMenuBar menubar = new JMenuBar()// Create a menubar
    this.setJMenuBar(menubar)// Display it in the JFrame

    // Create menus and add to the menubar
    JMenu filemenu = new JMenu("File");
    JMenu colormenu = new JMenu("Color");
    menubar.add(filemenu);
    menubar.add(colormenu);

    // Create some Action objects for use in the menus and toolbars.
    // An Action combines a menu title and/or icon with an ActionListener.
    // These Action classes are defined as inner classes below.
    Action clear = new ClearAction();
    Action quit = new QuitAction();
    Action black = new ColorAction(Color.black);
    Action red = new ColorAction(Color.red);
    Action blue = new ColorAction(Color.blue);
    Action select new SelectColorAction();

    // Populate the menus using Action objects
    filemenu.add(clear);
    filemenu.add(quit);
    colormenu.add(black);
    colormenu.add(red);
    colormenu.add(blue);
    colormenu.add(select);

    // Now create a toolbar, add actions to it, and add it to the
    // top of the frame (where it appears underneath the menubar)
    JToolBar toolbar = new JToolBar();
    toolbar.add(clear);
    toolbar.add(select);
    toolbar.add(quit);
    contentPane.add(toolbar, BorderLayout.NORTH);

    // Create another toolbar for use as a color palette and add to
    // the left side of the window.
    JToolBar palette = new JToolBar();
    palette.add(black);
    palette.add(red);
    palette.add(blue);
    palette.setOrientation(SwingConstants.VERTICAL);
    contentPane.add(palette, BorderLayout.WEST);
  }

  /** This inner class defines the "clear" action that clears the scribble */
  class ClearAction extends AbstractAction {
    public ClearAction() {
      super("Clear")// Specify the name of the action
    }

    public void actionPerformed(ActionEvent e) {
      scribblePane.clear();
    }
  }

  /** This inner class defines the "quit" action to quit the program */
  class QuitAction extends AbstractAction {
    public QuitAction() {
      super("Quit");
    }

    public void actionPerformed(ActionEvent e) {
      // Use JOptionPane to confirm that the user really wants to quit
      int response = JOptionPane.showConfirmDialog(Scribble.this,
          "Really Quit?");
      if (response == JOptionPane.YES_OPTION)
        System.exit(0);
    }
  }

  /**
   * This inner class defines an Action that sets the current drawing color of
   * the ScribblePane2 component. Note that actions of this type have icons
   * rather than labels
   */
  class ColorAction extends AbstractAction {
    Color color;

    public ColorAction(Color color) {
      this.color = color;
      putValue(Action.SMALL_ICON, new ColorIcon(color))// specify icon
    }

    public void actionPerformed(ActionEvent e) {
      scribblePane.setColor(color)// Set current drawing color
    }
  }

  /**
   * This inner class implements Icon to draw a solid 16x16 block of the
   * specified color. Most icons are instances of ImageIcon, but since we're
   * only using solid colors here, it is easier to implement this custom Icon
   * type
   */
  static class ColorIcon implements Icon {
    Color color;

    public ColorIcon(Color color) {
      this.color = color;
    }

    // These two methods specify the size of the icon
    public int getIconHeight() {
      return 16;
    }

    public int getIconWidth() {
      return 16;
    }

    // This method draws the icon
    public void paintIcon(Component c, Graphics g, int x, int y) {
      g.setColor(color);
      g.fillRect(x, y, 1616);
    }
  }

  /**
   * This inner class defines an Action that uses JColorChooser to allow the
   * user to select a drawing color
   */
  class SelectColorAction extends AbstractAction {
    public SelectColorAction() {
      super("Select Color...");
    }

    public void actionPerformed(ActionEvent e) {
      Color color = JColorChooser.showDialog(Scribble.this,
          "Select Drawing Color", scribblePane.getColor());
      if (color != null)
        scribblePane.setColor(color);
    }
  }
}

/*
 * Copyright (c) 2000 David Flanagan. All rights reserved. This code is from the
 * book Java Examples in a Nutshell, 2nd Edition. It is provided AS-IS, WITHOUT
 * ANY WARRANTY either expressed or implied. You may study, use, and modify it
 * for any non-commercial purpose. You may distribute it non-commercially as
 * long as you retain this notice. For a commercial use license, or to purchase
 * the book (recommended), visit http://www.davidflanagan.com/javaexamples2.
 */

/**
 * A simple JPanel subclass that uses event listeners to allow the user to
 * scribble with the mouse. Note that scribbles are not saved or redrawn.
 */

class ScribblePane2 extends JPanel {
  public ScribblePane2() {
    // Give the component a preferred size
    setPreferredSize(new Dimension(450200));

    // Register a mouse event handler defined as an inner class
    // Note the call to requestFocus(). This is required in order for
    // the component to receive key events.
    addMouseListener(new MouseAdapter() {
      public void mousePressed(MouseEvent e) {
        moveto(e.getX(), e.getY())// Move to click position
        requestFocus()// Take keyboard focus
      }
    });

    // Register a mouse motion event handler defined as an inner class
    // By subclassing MouseMotionAdapter rather than implementing
    // MouseMotionListener, we only override the method we're interested
    // in and inherit default (empty) implementations of the other methods.
    addMouseMotionListener(new MouseMotionAdapter() {
      public void mouseDragged(MouseEvent e) {
        lineto(e.getX(), e.getY())// Draw to mouse position
      }
    });

    // Add a keyboard event handler to clear the screen on key 'C'
    addKeyListener(new KeyAdapter() {
      public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_C)
          clear();
      }
    });
  }

  /** These are the coordinates of the the previous mouse position */
  protected int last_x, last_y;

  /** Remember the specified point */
  public void moveto(int x, int y) {
    last_x = x;
    last_y = y;
  }

  /** Draw from the last point to this point, then remember new point */
  public void lineto(int x, int y) {
    Graphics g = getGraphics()// Get the object to draw with
    g.setColor(color)// Tell it what color to use
    g.drawLine(last_x, last_y, x, y)// Tell it what to draw
    moveto(x, y)// Save the current point
  }

  /**
   * Clear the drawing area, using the component background color. This method
   * works by requesting that the component be redrawn. Since this component
   * does not have a paintComponent() method, nothing will be drawn. However,
   * other parts of the component, such as borders or sub-components will be
   * drawn correctly.
   */
  public void clear() {
    repaint();
  }

  /** This field holds the current drawing color property */
  Color color = Color.black;

  /** This is the property "setter" method for the color property */
  public void setColor(Color color) {
    this.color = color;
  }

  /** This is the property "getter" method for the color property */
  public Color getColor() {
    return color;
  }

}

           
         
    
  
Related examples in the same category
1. 印刷代码实现打印
2. 打印图像直接打印
3. 最简单的SWT打印范例最简单的SWT打印范例
4. 打印在Java 2 : PrinterJob
5. 打印在Java :网页格式和文件
6. 打印在Java :多页
7. 打印在Java 5
8. 打印在Java 6
9. 简单的图书印刷简单的图书印刷
10. 形状打印形状打印
11. 显示打印对话框并打印
12. 打印打印区域概述打印打印区域概述
13. 打印的文本文件和打印预览打印的文本文件和打印预览
14. 可打印演示可打印演示
15. 打印图形界面组件打印图形界面组件
16. 书
17. 另一个打印演示另一个打印演示
18. 图书打印演示图书打印演示
19. 印刷组合Java 1.2和1.4之路印刷组合Java 1.2和1.4之路
20. 印刷方式Java 1.4
21. 提示打印机
22. 印刷方式Java 1.1印刷方式Java 1.1
23. 可打印文件
24. PrintFile -打印文件命名的命令行PrintFile -打印文件命名的命令行
25. 打印到标准输出
26. PrintPanel is the base for an open-ended series of classesPrintPanel is the base for an open-ended series of classes
27. 打印演示:图书打印演示:图书
28. Print Test Print Test
29. 分页文字分页文字
30. 可打印区域
31. 实际可打印区域
32. 打印页的不同格式
33. 设置定位的打印页面
34. 打印对话框:更改默认打印机设置(默认打印机,份数,范围页)
35. 打印到文件
36. 监听打印服务状态变化
37. 打印图片
38. 覆盖的默认操作的JTextComponent
39. 显示页面格式对话框:修改默认的页面格式,如方向和纸张大小。
40. 可打印组件
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.