package person.move;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.*;
public class KeyListener1 extends JFrame
implements ActionListener {
public JButton b1=new JButton("确定");
public int x;
public int y;
public JPanel jpanel=new JPanel();
public JFrame frame = new JFrame("键盘响应");
public void _int()
{ this.x=110;
this.y=180;
frame.setLocation(300, 300);
frame.setSize(300, 300);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setContentPane(jpanel);
jpanel.setBackground(Color.GREEN);
jpanel.setLayout(null);
jpanel.add(b1);
b1.setBounds(this.x, this.y, 80, 25);
b1.addActionListener(this);
//addMouseListener(new Move().m);
jpanel.setFocusable(true);
jpanel.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_RIGHT)
b1.setBounds(++x, y, 80, 25);
if(e.getKeyCode()==KeyEvent.VK_LEFT)
b1.setBounds(--x,y, 80, 25);
if(e.getKeyCode()==KeyEvent.VK_UP)
b1.setBounds(x,--y, 80, 25);
if(e.getKeyCode()==KeyEvent.VK_DOWN)
b1.setBounds(x,++y, 80, 25);
}
}); }
public static void main(String[] args){
KeyListener1 move=new KeyListener1();
move._int();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
程序是做了一个键盘监视,用上下左右键可以移动按钮的位置,刚进去程序是键盘监听可以实现,为什么我单击一下按钮后,键盘监听就不能执行了呢?是不是按钮的响应屏蔽了键盘监听啊?该怎么做才不会这样子啊?
解决方案 »
- AXIS2+SSL 的问题,请高手帮忙!
- JAVA界面实在让我无语了
- synchronized method小問題
- SAX解析XML时,能用Xpath吗?
- 编写一个类,包括一个字符串变量,在定义处将期初始化.另一个字符串变量由构建器初始化.说明这两种方法的区别?
- 求java调用EXCEL函数并计算后将值返回的方法
- java传参到底是按值还是按引用?最好学过C/C++的人来回答一下
- 谁能说说jsp中的exception对象的使用方法?100分 :)
- 怎样把一个字符串转换为大写?
- JFrame设置布局管理器BorderLayout的一个问题。详情见内。谢谢。
- j2se问题
- 帮忙解释下 运行结果,谢了,,
jpanel.setFocusable(true); //不是给jpanel加监听 是给b1加监听
jpanel.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_RIGHT)
b1.setBounds(++x, y, 80, 25);
if(e.getKeyCode()==KeyEvent.VK_LEFT)
b1.setBounds(--x,y, 80, 25);
if(e.getKeyCode()==KeyEvent.VK_UP)
b1.setBounds(x,--y, 80, 25);
if(e.getKeyCode()==KeyEvent.VK_DOWN)
b1.setBounds(x,++y, 80, 25);
}
});按照你说的 键盘才是事件源,但是你给jpanel加了键盘监听.............
另外给b1加了个actionListener完全没有必要。把b1.addActionListener(this); 这一句去掉
jpanel.addKeyListener改成b1.addKeyListener
不是对和错的问题,是丧失焦点的问题为了加深你的理解,你这么简单修改下:
@Override
public void actionPerformed(ActionEvent e) {
jpanel.requestFocus(); // 让jpanel重获焦点
}
就可以看到效果了,但这不是解决问题最合适的方法。
楼主还是多Google了解了解关于事件捕获机制吧
就是这句话啊,我晕:
jpanel.requestFocus();