One of the Keyborad Event

来源:互联网 发布:中小企业数据 编辑:程序博客网 时间:2024/06/03 02:30

 
  import java.awt.*;
  import javax.swing.*;
  import java.util.*;
  import java.awt.geom.*;
  import java.awt.event.*;
 
  public class Sketch{
    public static void main(String args[]){
     
      SketchFrame frame = new SketchFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.show();
    }
  }

  /**
     A frame with a panel for sketching a figure
  */
 
  class SketchFrame extends JFrame{
   
    public SketchFrame(){
     
      setTitle("Sketch");
      setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
      SketchPanel panel = new SketchPanel();
      Container contentPane = getContentPane();
      contentPane.add(panel);
    }
   
    public static  int DEFAULT_WIDTH = 300;
    public static  int DEFAULT_HEIGHT =200;

  }

  /**
     A panel for sketching with the keyboard.
  */
 
  class SketchPanel extends JPanel{
  
   public SketchPanel(){
   
    last =new Point2D.Double(100,100);
    lines = new ArrayList();
    KeyHandler listener = new KeyHandler();
    addKeyListener(listener);
    setFocusable(true);
   }

   /**
      Add a new line segment to the sketch.
      @param dx the movement in x direction
      @param dy the movement in x direction
   */
   public void add(int dx,int dy){
  
    //computer new end point
    Point2D end = new Point2D.Double(last.getX()+dx,last.getY()+dy);
   
    //add line segment
    Line2D line = new Line2D.Double(last,end);
    lines.add(line);
    repaint();
   
    //remember new end point
    last = end;
   }
  
   public void paintComponent(Graphics g){
  
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D)g;
   
    Rectangle2D rect = new Rectangle2D.Double(100,100,200,150);
    //g2.setColor(Color.red);
     g2.draw(rect);
   
    // draw all lines
    for(int i = 0; i < lines.size(); i++)
     g2.draw((Line2D)lines.get(i));
    
   }
   private Point2D last;
   private ArrayList lines;
  
   private static final int SMALL_INCREMENT = 1;
   private static final int LARGE_INCREMENT = 5;
  
   private class KeyHandler implements KeyListener{
  
    public void keyPressed(KeyEvent event){
    
     int keyCode = event.getKeyCode();

     // set distance
     int d;
      if(event.isShiftDown())
      d = LARGE_INCREMENT;
     else
      d = SMALL_INCREMENT;
    
      // add line segment
      if(keyCode == KeyEvent.VK_LEFT) add(-d,0);
      else if(keyCode == KeyEvent.VK_RIGHT) add(d,0);
      else if(keyCode == KeyEvent.VK_UP) add(0,-d);
      else if(keyCode == KeyEvent.VK_DOWN) add(0,d);
     
    }
   
    public void keyReleased(KeyEvent event){}
   
    public void keyTyped(KeyEvent event){
   
     char keyChar = event.getKeyChar();

     // set distance
     int d;
     if(Character.isUpperCase(keyChar)){
     
      d = LARGE_INCREMENT;
      keyChar = Character.toLowerCase(keyChar);
     
     }
     else
      d = SMALL_INCREMENT;
     
      // add line segment
      if(keyChar == 'h') add(-d,0);
      else if(keyChar == 'l') add(d,0);
      else if(keyChar == 'k') add(0,-d);
      else if(keyChar == 'j') add(0,d);
    
    }
   }
  }

原创粉丝点击