亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sketchview.java

?? Java Classic Examples是我買的兩本書:《JAVA經典實例》和《java入門經典源代碼》里邊附送光盤里帶的源碼
?? JAVA
字號:
import javax.swing.*;
import java.util.*;                 // For Observer
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;            // For events
import javax.swing.event.*;         // For mouse input adapter
import java.awt.print.*;

class SketchView extends    JComponent
                 implements Observer, Constants, ActionListener, Printable
{
  public SketchView(Sketcher theApp)
  {
    this.theApp = theApp;
    MouseHandler handler = new MouseHandler();         // create the mouse listener
    addMouseListener(handler);                         // Listen for button events
    addMouseMotionListener(handler);                   // Listen for motion events

    // Add the pop-up menu items
    moveItem = elementPopup.add("Move");
    deleteItem = elementPopup.add("Delete");
    rotateItem = elementPopup.add("Rotate");
    sendToBackItem = elementPopup.add("Send-to-back");

    // Add the menu item listeners
    moveItem.addActionListener(this);
    deleteItem.addActionListener(this);
    rotateItem.addActionListener(this);
    sendToBackItem.addActionListener(this);
  }

  public int print(Graphics g,                       // Graphics context for printing
                   PageFormat pageFormat,            // The page format
                   int pageIndex)                    // Index number of current page
                   throws PrinterException
  {
    if(pageIndex>0)
      return NO_SUCH_PAGE;
    Graphics2D g2D = (Graphics2D) g;
    Rectangle rect = getModelExtent();             // Get sketch bounds

    // If the width is more than the height, set landscape
    if(rect.width > rect.height)
      pageFormat.setOrientation(pageFormat.LANDSCAPE);

    // Calculate the scale to fit sketch to page
    double scaleX = pageFormat.getImageableWidth()/rect.width;
    double scaleY = pageFormat.getImageableHeight()/rect.height;
    double scale = Math.min(scaleX, scaleY);        // Get minimum scale factor

    // Move origin to page printing area corner
    g2D.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
    g2D.scale(scale, scale);                        // Apply scale factor
    g2D.translate(-rect.x, -rect.y);                // Move origin to rect top left

    // Adjust for landscape printing if necessary
    if(rect.width > rect.height)
      g2D.transform(new AffineTransform(0, 1, -1, 0, rect.height, 0));

    paint(g2D);
    return PAGE_EXISTS;
  }

  public void paint(Graphics g)
  {
    Graphics2D g2D = (Graphics2D)g;                     // Get a 2D device context
    Iterator elements = theApp.getModel().getIterator();
    Element element;                                    // Stores an element

    while(elements.hasNext())                           // Go through the list
    {
      element = (Element)elements.next();               // Get the next element
      element.draw(g2D);                                // Draw its shape
    }
  }

  // Method called by Observable object when it changes
  public void update(Observable o, Object rectangle)
  {
    if(rectangle == null)
      repaint();
    else
      repaint((Rectangle)rectangle);
  }

  // Get the rectangle enclosing an entire sketch
  Rectangle getModelExtent()
  {
    Iterator elements = theApp.getModel().getIterator();
    Rectangle rect = new Rectangle();                   // An empty rectangle
    Element element;                                    // Stores an element
    while(elements.hasNext())                           // Go through the list
    {
      element = (Element)elements.next();               // Get the next element
      rect.add(element.getBounds());                    // Expand union
    }
    if(rect.width == 0)                                 // Make sure width
      rect.width = 1;                                   // is non-zero
    if(rect.height == 0)                                // and the height
      rect. height = 1;
    return rect;
  }

  private Element highlightElement;                                    // Highlighted element
  private JPopupMenu elementPopup = new JPopupMenu("Element");
  private JMenuItem moveItem, deleteItem,rotateItem, sendToBackItem;
  private Sketcher theApp;                                             // The application object
  private int mode = NORMAL;
  private Element selectedElement;

  class MouseHandler extends MouseInputAdapter
  {
    public void mousePressed(MouseEvent e)
    {
      start = e.getPoint();                    // Save cursor position
      int modifier = e.getModifiers();         // Get modifiers

      if((modifier & e.BUTTON1_MASK) != 0)
      {
            g2D = (Graphics2D)getGraphics();                 // Get graphics context
            g2D.setXORMode(getBackground());                 // Set XOR mode
            g2D.setPaint(theApp.getWindow().getElementColor()); // Set color
      }
    }

    public void mouseDragged(MouseEvent e)
    {
      last = e.getPoint();                              // Save cursor position
      int modifier = e.getModifiers();                  // Get modifiers

      if((modifier & e.BUTTON1_MASK) != 0 && 
         (theApp.getWindow().getElementType() != TEXT) &&
          (mode == NORMAL))
      {
        if(tempElement == null)                         // Is there an element?
          tempElement = createElement(start, last);     // No so create one
        else
        {
          tempElement.draw(g2D);                        // Yes - draw to erase it
          tempElement.modify(start, last);              // Modify it
        }
        tempElement.draw(g2D);                          // and draw it
      }
      else if(mode == MOVE && selectedElement != null)
      {
        selectedElement.draw(g2D);                     // Draw to erase the element
        selectedElement.move(last.x-start.x, last.y-start.y);  // Move it
        selectedElement.draw(g2D);                     // Draw in its new position
        start = last;                                  // Make start current point
      }
      else if(mode == ROTATE && selectedElement != null)
      {
        selectedElement.draw(g2D);                   // Draw to erase the element
        selectedElement.rotate(getAngle(selectedElement.getPosition(),
                                              start, last));
        selectedElement.draw(g2D);                  // Draw in its new position
        start = last;                               // Make start current point
      }
    }

    public void mouseReleased(MouseEvent e)
    {
      int modifier = e.getModifiers();                  // Get modifiers

      if(e.isPopupTrigger())
      {
        start = e.getPoint();

        if(highlightElement==null)
          theApp.getWindow().getPopup().show((Component)e.getSource(), 
                                                      start.x, start.y);
        else
          elementPopup.show((Component)e.getSource(), start.x, start.y);

        start = null;
      }

      else if((modifier & e.BUTTON1_MASK) != 0 && 
         (theApp.getWindow().getElementType() != TEXT) &&
          mode == NORMAL)
      {
        if(tempElement != null)
          theApp.getModel().add(tempElement);  // Add element to the model
      }
      else if(mode == MOVE || mode == ROTATE)
      {
        if(selectedElement != null)
          repaint();
        mode = NORMAL;
      }

      if(g2D != null)
      {
        g2D.dispose();                       // Release graphic context resource
        g2D = null;                          // Set it to null
      }
      start = last = null;                   // Remove the points
      selectedElement = tempElement = null;  // Reset elements
    }

    public void mouseClicked(MouseEvent e)
    {
      int modifier = e.getModifiers();                   // Get modifiers

      if((modifier & e.BUTTON1_MASK) != 0 && 
         (theApp.getWindow().getElementType() == TEXT))
      {

        start = e.getPoint();               // Save cursor position - start of text
        String text = JOptionPane.showInputDialog(
                   (Component)e.getSource(),              // Used to get the frame
                   "Enter Text:",                         // The message
                   "Dialog for Text Element",             // Dialog title
                   JOptionPane.PLAIN_MESSAGE);            // No icon

        if(text != null)                                  // If we have text
        {                                                 // create the element
          g2D = (Graphics2D)getGraphics();
          Font font = theApp.getWindow().getCurrentFont();

          // Create the text element
          tempElement = new Element.Text(
               font,
               text,
               start,
               theApp.getWindow().getElementColor(),
               font.getStringBounds(text, g2D.getFontRenderContext()).getBounds());

          if(tempElement != null)                         // If we created one
            theApp.getModel().add(tempElement);           // add it to the model
          tempElement = null;
          g2D.dispose();
          g2D = null;
          start = null;
        }
      }
    }

    // Handle mouse moves
    public void mouseMoved(MouseEvent e)
    {
      Point currentCursor = e.getPoint();  // Get current cursor position
      Iterator elements = theApp.getModel().getIterator();
      Element element;                                    // Stores an element

      while(elements.hasNext())                           // Go through the list
      {
        element = (Element)elements.next();               // Get the next element
        if(element.getBounds().contains(currentCursor))   // Under the cursor?
        {
          if(element==highlightElement)            // If its already highlighted
            return;                                // we are done
          g2D = (Graphics2D)getGraphics();         // Get graphics context
          if(highlightElement!=null)               // If an element is highlighted
          {
            highlightElement.setHighlighted(false);// un-highlight it and
            highlightElement.draw(g2D);            // draw it normal color
          }
          element.setHighlighted(true);            // Set highlight for new element
          highlightElement = element;              // Store new highlighted element
          element.draw(g2D);                       // Draw it highlighted 
          g2D.dispose();                       // Release graphic context resources
          g2D = null;
          return;
        }
      }

      // Here there is no element under the cursor so...
      if(highlightElement!=null)                // If an element is highlighted
      {
        g2D = (Graphics2D)getGraphics();        // Get graphics context
        highlightElement.setHighlighted(false); // ...turn off highlighting
        highlightElement.draw(g2D);             // Redraw the element
        highlightElement = null;                // No element highlighted
        g2D.dispose();                         // Release graphic context resources
        g2D = null;
      }
    }

    private Element createElement(Point start, Point end)
    {
      switch(theApp.getWindow().getElementType())
      {
        case LINE:
           return new Element.Line(start, end,
                                   theApp.getWindow().getElementColor());
        
        case RECTANGLE:
           return new Element.Rectangle(start, end,
                                        theApp.getWindow().getElementColor());
        
        case CIRCLE:
           return new Element.Circle(start, end, 
                                     theApp.getWindow().getElementColor());

        case CURVE:
         return new Element.Curve(start, end,
                                  theApp.getWindow().getElementColor());
      }
      return null;
    }

    // Helper method for calculating getAngle()
    double getAngle(Point position, Point start, Point last)
    {
      // Get perpendicular distance from last to the line from position to start
      double perp = Line2D.ptLineDist(position.x, position.y,
                                      last.x, last.y, start.x, start.y);
      // Get the distance from position to start
      double hypotenuse = position.distance(start);
      if(hypotenuse == 0.0)                        // Make sure its
        hypotenuse = 1.0;                          // non-zero

      // Angle is the arc sine of perp/hypotenuse. Clockwise is positive angle
      return -Line2D.relativeCCW(position.x, position.y,
                                 start.x, start.y,
                                 last.x, last.y)*Math.asin(perp/hypotenuse);
    }

    private Point start;                     // Stores cursor position on press
    private Point last;                      // Stores cursor position on drag
    private Element tempElement;             // Stores a temporary element
    private Graphics2D g2D;                  // Temporary graphics context
  }

  public void actionPerformed(ActionEvent e )
  {
    Object source = e.getSource();
    if(source == moveItem)
    {
      // Process a move
      mode = MOVE;
      selectedElement = highlightElement;
    }
    else if(source == deleteItem)
    {
      // Process a delete
      if(highlightElement != null)                      // If there's an element
      {
        theApp.getModel().remove(highlightElement);     // then remove it
        highlightElement = null;                        // Remove the reference
      }
    }
    else if(source == rotateItem)
    {
      // Process a rotate
      mode = ROTATE;
      selectedElement = highlightElement;
    }
    else if(source == sendToBackItem)
    {
      // Process a send-to-back
      if(highlightElement != null)
      {
        theApp.getModel().remove(highlightElement);
        theApp.getModel().add(highlightElement);
        highlightElement.setHighlighted(false);
        highlightElement = null;
        repaint();
      }
    }
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产综合色视频| 国产成人精品在线看| 久久精品水蜜桃av综合天堂| 欧美福利视频一区| 欧美视频中文字幕| 色就色 综合激情| 一道本成人在线| 91国偷自产一区二区三区成为亚洲经典| 在线播放亚洲一区| 亚洲另类一区二区| 亚洲桃色在线一区| 亚洲精品日日夜夜| 成人午夜电影网站| 99久久国产综合色|国产精品| 成人18视频在线播放| 日本国产一区二区| 中文字幕第一区第二区| 男女男精品网站| 国产乱对白刺激视频不卡| 成人免费观看视频| 久久久www成人免费无遮挡大片 | 99久久精品国产网站| 精品少妇一区二区| 国产喷白浆一区二区三区| 亚洲视频精选在线| 99久久久国产精品| 成人免费在线视频观看| 亚洲国产视频在线| 久久国产精品一区二区| 粉嫩一区二区三区性色av| 色婷婷亚洲一区二区三区| 综合久久一区二区三区| 不卡免费追剧大全电视剧网站| 国产亚洲精品bt天堂精选| 久久电影网电视剧免费观看| 精品国精品国产尤物美女| 亚洲人成精品久久久久久| 日韩中文字幕av电影| 懂色av中文一区二区三区| 久久精品亚洲麻豆av一区二区 | 日韩精品一区二区三区在线观看| 国产视频一区二区在线观看| 国产麻豆成人传媒免费观看| 色网综合在线观看| 亚洲综合图片区| 国产91在线观看| 国产精品国产三级国产普通话99 | 成人一区二区三区视频 | 中文字幕日韩一区| 色狠狠桃花综合| 日韩精品91亚洲二区在线观看| 日韩一级高清毛片| 亚洲国产va精品久久久不卡综合| 欧美日韩精品电影| 一区二区三区日韩| 99久久久精品| 午夜欧美大尺度福利影院在线看| 成人激情开心网| 亚洲综合色丁香婷婷六月图片| 欧美一区二区三区婷婷月色| 亚洲国产精品久久久久秋霞影院 | 国产福利精品导航| 椎名由奈av一区二区三区| 欧美亚洲国产一区二区三区va| 日韩av一区二| 正在播放一区二区| 亚洲第一会所有码转帖| 一本色道久久综合亚洲精品按摩| 午夜精品久久久久久久99水蜜桃| 精品久久久久久久久久久久久久久| 成人免费不卡视频| 日韩精品乱码av一区二区| 国产精品网站在线| 成人av资源在线| 日韩精品午夜视频| 国产精品国产三级国产普通话三级 | 成人毛片视频在线观看| 日韩精品久久理论片| 国产精品久久久久9999吃药| 日韩一区二区三区视频在线观看| 成人av综合一区| 精品在线免费视频| 国产午夜精品一区二区三区嫩草 | 亚洲视频香蕉人妖| 久久美女艺术照精彩视频福利播放| 91蜜桃免费观看视频| 亚洲欧美日韩国产综合在线| 欧美大片一区二区| 欧美视频一二三区| 99久久精品国产网站| 国产综合成人久久大片91| 久久亚洲一级片| 成人av免费网站| 精品中文字幕一区二区| 午夜欧美在线一二页| 亚洲天堂精品视频| 亚洲欧美日韩在线不卡| 精品日本一线二线三线不卡| 欧美欧美欧美欧美| 色婷婷综合久久| 成人看片黄a免费看在线| 捆绑变态av一区二区三区| 午夜精品在线看| 亚洲午夜久久久久久久久久久 | 精品久久久久香蕉网| 在线电影院国产精品| 欧美性感一区二区三区| 91美女福利视频| 99精品视频在线免费观看| 成人一道本在线| 成人免费va视频| 懂色av一区二区三区蜜臀| 国产一区999| 国产精华液一区二区三区| 久久99久久99小草精品免视看| 日本少妇一区二区| 麻豆成人久久精品二区三区红| 26uuu另类欧美亚洲曰本| 精品福利在线导航| 精品国产髙清在线看国产毛片| 欧美一区二区精品在线| 欧美一区日本一区韩国一区| 日韩一区二区免费视频| 精品国产乱码久久久久久久| 精品国产三级a在线观看| 久久综合色之久久综合| 国产欧美日韩三级| 国产精品伦理在线| 亚洲少妇屁股交4| 一区二区日韩电影| 日韩国产精品大片| 国产综合久久久久久鬼色| 国产91清纯白嫩初高中在线观看| 成人午夜私人影院| 欧美中文字幕一区| 粉嫩绯色av一区二区在线观看 | 日韩电影免费一区| 韩国视频一区二区| 不卡视频一二三四| 欧美系列亚洲系列| 精品毛片乱码1区2区3区| 国产欧美日韩综合| 一区二区三区不卡视频在线观看 | 国产成人综合精品三级| 北岛玲一区二区三区四区| 九色|91porny| 99久久婷婷国产综合精品| 欧美影院一区二区三区| 日韩一级在线观看| 国产精品久久久久久久午夜片| 一区二区三区在线不卡| 免费观看91视频大全| 不卡免费追剧大全电视剧网站| 精品视频一区二区三区免费| 在线一区二区观看| 日韩精品资源二区在线| 国产精品理论在线观看| 日韩精彩视频在线观看| 国产成人亚洲综合a∨婷婷 | 欧美精品丝袜中出| 国产日产欧美一区二区视频| 伊人婷婷欧美激情| 国内精品伊人久久久久影院对白| 日韩欧美激情在线| 一区二区在线看| 国产精品99久久久久| 在线成人午夜影院| 国产精品国产三级国产普通话三级 | 久久久亚洲国产美女国产盗摄 | 久久久久久麻豆| 亚洲综合色在线| 成人黄色免费短视频| 日韩一区二区三区视频在线 | 精品国精品自拍自在线| 亚洲午夜精品在线| 成人做爰69片免费看网站| 9191国产精品| 亚洲黄色免费网站| 成人免费黄色在线| 久久精品人人做| 麻豆国产精品视频| 欧美最猛性xxxxx直播| 国产欧美日韩久久| 精品中文字幕一区二区小辣椒| 欧美日韩在线三区| 一区二区三区日韩精品视频| 成人av网址在线| 国产精品美女久久久久aⅴ国产馆| 美腿丝袜亚洲色图| 日韩一卡二卡三卡四卡| 奇米一区二区三区av| 制服丝袜av成人在线看| 亚洲成av人片在www色猫咪| 色综合一区二区| 欧美日韩一级片网站| 亚洲五月六月丁香激情| 欧美日韩综合不卡| 亚洲大片一区二区三区| 欧美色区777第一页| 亚洲午夜精品17c|