如何执行?在Panel面板中
pxr08 2003-10-30 09:45:20 class SketchPanel extends JPanel
{
private Point2D start;
private ArrayList lines;
private static final int SMALL_INCREMENT=1;
private static final int LARGE_INCREMENT=5;
public SketchPanel()
{
start=new Point2D.Double(100,100);
lines=new ArrayList();
KeyHandler listener=new KeyHandler();
addKeyListener(listener);
}
public boolean isFocusable()
{
return true;
}
public void add(int dx,int dy)
{
Point2D end=new Point2D.Double(start.getX()+dx,start.getY()+dy);
Line2D line=new Line2D.Double(start,end);
lines.add(line);
repaint();
start=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 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=='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);
}
}
}
这是java核心技术里得一道例题,我想知道在class SketchPanel中执行得顺序是怎么样得,我没看到什么调用isFocusable()方法呀,是不是自动加载得?