键盘画图

import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

public class FirstSample{
    public static void main(String[] args){
        SketchFrame frame=new SketchFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

class SketchFrame extends JFrame{
    public SketchFrame(){
        setTitle("Michael");
        setSize(WIDTH,HEIGHT);
       
        SketchPanel panel=new SketchPanel();
        add(panel);
    }
    public static final int WIDTH=800;
    public static final int HEIGHT=600;
}

class SketchPanel extends JPanel{
    public SketchPanel(){
        begin=new Point(100,100);
        lines=new ArrayList<Line2D>();
       
        KeyHandler listener=new KeyHandler();
        addKeyListener(listener);
       
        setFocusable(true);
    }
   
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2=(Graphics2D) g;
       
        for(Line2D l:lines)
            g2.draw(l);
    }
   
    public void add(int dx,int dy){
        Point2D end=new Point2D.Double(begin.getX()+dx,begin.getY()+dy);
       
        Line2D line=new Line2D.Double(begin,end);
        lines.add(line);
        repaint();
       
        begin=end;
    }
   
    private Point2D begin;
    private ArrayList<Line2D> 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();
           
            int d;
            if(event.isShiftDown())
                d=LARGE_INCREMENT;
            else
                d=SMALL_INCREMENT;
           
            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();
           
            int d;
            if(Character.isUpperCase(keyChar)){
                d=LARGE_INCREMENT;
                keyChar=Character.toLowerCase(keyChar);
            }
            else
                d=SMALL_INCREMENT;
           
            if(keyChar=='j') add(-d,0);
            else if(keyChar=='l') add(d,0);
            else if(keyChar=='i') add(0,-d);
            else if(keyChar=='k') add(0,d);
        }       
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值