本题程序的功能是用键盘上的方向键来控制直线的绘制方向。如果一直按向上的方向键,则在窗口中从焦点开始向上缓慢绘制直线,按其他方向的方向键也会向对应的方向缓慢地绘制直线。如果按下Shift键,绘制直线的速度会加快。请将下述程序补充完整(注意:不得改动程序的结构,不得增行或删行)。
import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
public class advance
public static void main(String[] args)
SketchFrame frame = new SketchFrame();
frame.setDefaultCloseOperation(JFrame.EXIT ON CLOSE);
frame,show ();
class SketchFrame extends JFrame
public SketchFrame()
setTitle("advance");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
SketchPanel panel = new SketchPanel();
Container contentPane = getContentPane();
contentPane.add(panel);
public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;
class SketchPanel extends JPanel
______;
last = new Point2D.Double(100,100);
lines = new ArrayList();
KeyHandler listener = new KeyHandler();
______;
setFocusable(true);
public void add(int dx,int dy)
Point2D end = new Point2D.Double(last.getX()+ dx,last.getY() + dy);
Line2D line = new Line2D.Double(last,end);
lines.add(line);
repaint();
last = end;
public void paintComponent(Graphics g)
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
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 = i;
private static final int LARGE_INCREMENT = 5;
private class KeyHandler implements KeyListener
public void keyPressed(KeyEvent event)
______;
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 (Charaeter.isUpperCase(keyChar))
d = LARGE_INCREMENT;
keyChar = Character.toLowerCase(keyChar);
else
d = SMALL_INCREMENT;
参考答案:public SketchPanel()。
addKeyListener(listener)。
int keyCode=event.getKeyCode()。