黑马程序员技术交流社区

标题: Jpanel无法实现键盘监听? [打印本页]

作者: 刘云龙    时间: 2012-10-10 15:15
标题: Jpanel无法实现键盘监听?

  1. <p>import java.awt.Graphics;
  2. import java.awt.event.KeyAdapter;
  3. import
  4. java.awt.event.KeyEvent;</p>
  5. <p>import javax.swing.JFrame;
  6. import javax.swing.JPanel;</p>
  7. <p>public class MyPanel extends JPanel
  8. {
  9. int x = 12, y = 22;

  10.   MyPanel()
  11.   {
  12.    this.addKeyListener(new KeyAdapter()
  13.    {
  14.     public void keyPressed(KeyEvent e)
  15.     {
  16.      int code = e.getKeyCode();
  17.      switch(code)
  18.      {
  19.             case KeyEvent.VK_UP:add();//在这里调用了add()方法但不响应?
  20.      }   
  21. }
  22. });
  23. }
  24.   
  25.   public void paint(Graphics g)
  26.   {
  27.    g.drawString("MyPanel",x,y);
  28.   }
  29.   
  30.   public void add()
  31.   
  32. {
  33.    x++;
  34.    y++;
  35.    repaint();
  36.   
  37. }
  38. public static void main(String[] args)
  39. {
  40.   //
  41. TODO Auto-generated method stub
  42.   JFrame f = new
  43. JFrame();
  44.   f.setBounds(1, 2, 300,
  45. 300);
  46.   f.setVisible(true);
  47.   f.add(new
  48. MyPanel());
  49.   
  50. }</p>
  51. <p>}</p>
复制代码
如何在JPanel中实现键盘事件?


作者: 柏占肖    时间: 2012-10-10 17:16
this.setFocusable(true);
在构造方法里加上这句吧    JPanel组件的默认焦点状态为false 所以就无法响应你为它添加的事件, 改成true就行了
作者: 唐增友    时间: 2012-10-10 17:41
  1. public static void main(String[] args)
  2. {
  3.   JFrame f = new
  4.   JFrame();
  5.   f.setBounds(1, 2, 300, 300);
  6.   
  7.   MyPanel myPanel=new MyPanel();
  8.   f.add(myPanel);
  9.   f.setVisible(true);
  10.   myPanel.requestFocusInWindow();//让面板获得焦点
  11. }
复制代码

作者: 刘云龙    时间: 2012-10-16 22:44
用requestFocusInWindow()实现的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2