⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scribble.java

📁 java learn PPT java learn PPT java learn PPT java learn PPT
💻 JAVA
字号:
     import java.applet.*;
     import java.awt.*;
     import java.awt.event.*;

     // ColorDescription 类存储 Color 以及它的描述. 
     // 提供这个类完全是为了方便把一个Color对象和一个String对象关联起来 
     class ColorDescription
     {
          // associates a Color with a text String, declared public for convenience
          public Color color;
          public String text;
              
          public ColorDescription(Color c, String s)
          {
               color = c;
               text  = s;
          }

          public boolean matches(String s)
          {
               return text.equals(s);
          }
     }    // ColorDescription

     // Scribble applet 让用户可以使用鼠标描绘点和线
	 // 它还可以改变当前画笔的颜色. 
     public class Scribble extends Applet implements ItemListener, ActionListener,
                                                     MouseListener, MouseMotionListener
     {
          private Choice colorChooser;  // 储存颜色的下拉框
          private Color  currentColor;  // 当前的画笔颜色

          // 一个 Color和关联字符名字的数组
          // 你所需要做的只是编辑这个列表来增加或者删除选项
          private final ColorDescription[] colors = new ColorDescription[] {
               new ColorDescription(Color.BLACK,  "Black"),
               new ColorDescription(Color.RED,    "Red"),
               new ColorDescription(Color.GREEN,  "Green"), 
               new ColorDescription(Color.BLUE,   "Blue"),
               new ColorDescription(Color.YELLOW, "Yellow"),
               new ColorDescription(Color.ORANGE, "Orange"), 
               new ColorDescription(Color.GRAY,   "Gray"), 
               new ColorDescription(Color.CYAN,   "Cyan")
          };

          // 所绘制线条的起点和终点
          private Point p1;
          private Point p2;          
 
          // 覆盖 Applet 类的init方法  
          public void init()
          {
               p1 = null;
               p2 = null;

               setBackground(Color.WHITE);

               // 记着注册自己来接收鼠标事件 
               addMouseListener(this);
               addMouseMotionListener(this);

               // 把光标改得时髦点
               setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));

               currentColor = colors[0].color;
     
               // 创建一个包含applet命令的 "sidebar"
               createSidebar();
          }

          //覆盖Applet类的destroy方法 
          public void destroy()
          {
               // 释放applet生命周期中的所有监听器
               removeMouseListener(this);
               removeMouseMotionListener(this);

               colorChooser.removeItemListener(this);
          }

          // 创建一个Frame,它包含颜色选项下拉框 和一个清除applet窗体的按钮
          private void createSidebar()
          {
               // 对于颜色数组中的每一个 ColorDescription ,提取其文本 
               // 并将它加入选项列表
               colorChooser = new Choice();
               for(int i = 0; i < colors.length; i++)
               {
                    colorChooser.add(colors[i].text);
               }
               colorChooser.addItemListener(this);

               // 创建 "clear window" 按钮 
               Button b = new Button("Clear Window");
               b.addActionListener(this);

               // 创建 frame 
               Frame f = new Frame();
               f.setLocation(getX() + getSize().width + 8, getY());
               f.setLayout(new GridLayout(3, 1, 5, 5));
               f.setBackground(Color.YELLOW);
               f.add(new Label("Pen Color:", Label.CENTER));
               f.add(colorChooser);
               f.add(b);
               f.pack();
               f.show();
          }

          // 使用当前画笔颜色绘制连接 p1 和 p2 的点  
          private void drawPoints()
          {
               Graphics g = getGraphics();
               g.setColor(currentColor);
               g.drawLine(p1.x, p1.y, p2.x, p2.y);
          }

          // 在 sidebar上的 "clear window" 按钮被点击时调用
		  public void actionPerformed(ActionEvent e)
          {
               repaint();
          }

          // 在下拉框改变时调用
          public void itemStateChanged(ItemEvent e)
          {
               String color = colorChooser.getSelectedItem();

               // 用当前的选项匹配画笔颜色
               for(int i = 0; i < colors.length; i++)
               {
                    if(colors[i].matches(color))
                    {
                         // 设置颜色
                         currentColor = colors[i].color;
                         break;
                    }
               }               
          }               

          /** 实现MouseMotionListener接口中的方法 */   

          public void mouseMoved(MouseEvent e) 
          { 
               // 什么也不做...
          }
          
          public void mouseDragged(MouseEvent e) 
          {
               // 如果点还没有设置的话,进行设置
               if(p1 == null)
               {
                    p1 = new Point(e.getX(), e.getY());
               }
               if(p2 == null)
               {
                    p2 = new Point(e.getX(), e.getY());
               }

               // 更新并绘制点
               p1.x = p2.x;
               p1.y = p2.y;
       
               p2.x = e.getX();
               p2.y = e.getY();
              
               drawPoints();
          }

          /** 实现 MouseListener 接口中的方法 */    

          public void mouseClicked(MouseEvent e) 
          {
               // 什么也不做...
          }

          public void mouseEntered(MouseEvent e) 
          {
               // 什么也不做...
          }

          public void mouseExited(MouseEvent e) 
          {
               // 什么也不做...
          }

          // 允许点在鼠标按钮按下时绘制,而鼠标不必在拖拽中 
          public void mousePressed(MouseEvent e) 
          {
               mouseDragged(e);
          }

          // 释放点,允许不连续的绘制 
          public void mouseReleased(MouseEvent e) 
          {
               p1 = null;
               p2 = null;
          }

     }    // Scribble

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -