请教一个关于requestFocus()的问题,急请高手解答
两个程序:
程序一:@@@@@@@@@@@@@@@@@@@@@@@@@@@@
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class AppWindow extends Frame
{
String keymsg="";
String mousemsg="";
int mouseX=30,mouseY=30;
public AppWindow()
{
addKeyListener(new MyKeyAdapter(this));
addMouseListener(new MyMouseAdapter(this));
addWindowListener(new MyWindowAdapter3());
}
public void paint(Graphics g)
{
g.drawString(keymsg,10,40);
g.drawString(mousemsg, mouseX, mouseY);
}
public static void main(String args[])
{
AppWindow appwin=new AppWindow();
appwin.setSize(new Dimension(300,200));
appwin.setVisible(true);
}
}
class MyKeyAdapter extends KeyAdapter
{
AppWindow appWindow;
public MyKeyAdapter(AppWindow app)
{
appWindow=app;
}
public void keyTyped(KeyEvent ke)
{
appWindow.keymsg+=ke.getKeyChar();
appWindow.repaint();
}
}
class MyMouseAdapter extends MouseAdapter
{
AppWindow appWindow;
public MyMouseAdapter(AppWindow app)
{
appWindow=app;
}
public void mousePressed(MouseEvent me)
{
appWindow.mouseX=me.getX();
appWindow.mouseY=me.getY();
appWindow.mousemsg="Mouse down at "+appWindow.mouseX+", "+appWindow.mouseY;
appWindow.repaint();
}
}
class MyWindowAdapter3 extends WindowAdapter
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
}
程序二:@@@@@@@@@@@@@@@@@@@@@
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class KeyEvents extends Applet implements KeyListener
{
String msg="";
int X=10,Y=20;
public void init()
{
addKeyListener(this);
requestFocus();
}
public void keyPressed(KeyEvent ke)
{
showStatus("Key down");
int key=ke.getKeyCode();
switch(key)
{
case KeyEvent.VK_F1:
msg+="<F1>";
break;
case KeyEvent.VK_F2:
msg+="<F2>";
break;
case KeyEvent.VK_F3:
msg+="<F3>";
break;
case KeyEvent.VK_PAGE_DOWN:
msg+="<PgDn>";
break;
case KeyEvent.VK_PAGE_UP:
msg+="<PgUp>";
break;
case KeyEvent.VK_LEFT:
msg+="<Left arrow>";
break;
case KeyEvent.VK_RIGHT:
msg+="<Right arrow>";
break;
}
repaint();
}
public void keyReleased(KeyEvent ke)
{
showStatus("Key Up");
}
public void keyTyped(KeyEvent ke)
{
msg+=ke.getKeyChar();
repaint();
}
public void paint(Graphics g)
{
g.drawString(msg,X,Y);
}
}
麻烦问一下,为什么第一个程序在响应KeyEvent的时候没有用requestFocus()方法,而第二个程序却需要用哪?
第二个程序的applet运行出来后,不是当前的焦点吗?