① java keyevent不能用
不是不能用是你程序的问题,以后不要这样讲话,好像你发现java缺陷似的。你得调用里面的相应变量才可以如:static int VK_ENTER 代表回车
在说了如果你想让按钮按下去后有所动作应该使用java.awt.event.KeyAdapter
里面有如下方法:
void keyPressed(KeyEvent e)
按下某个键时调用此方法。
void keyReleased(KeyEvent e)
释放某个键时调用此方法。
void keyTyped(KeyEvent e)
键入某个键时调用此方法。
② Java中KeyEvent中的getKeyText返回的是中文
KeyEvent e
char e.getKeyCode()
int e.getKeyChar()
这两个方法的返回都非中文
③ JAVA中的键盘事件KeyEvent
因为你添加的面板上含有按钮,第一个按钮默认会获得焦点,只有获得焦点组建才会相应事件。因为Frame无法获得焦点,所以就无法再响应事件了。如果把JButton改成JLabel,就不会有问题了。JLabel默认不会获得焦点,焦点仍然在Frame上,所以还会响应事件。
采用楼上,或改为
class MessagePanel extends JPanel {
public MessagePanel() {
setLayout(new GridLayout(8, 1));
JButton b;
for (int i = 0; i < 8; i++) {
b = new JButton("没用的按钮");
b.setFocusable(false);
add(b);
}
}
④ JAVA事件处理中的KeyEvent问题
你没有把KeyListener监听加到JFrame中,在MovingBall类中的this.add(mp); 语句后面加上一句this.addKeyListener(mp);就行了。完整的程序如下:
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;
public class MovingBall extends JFrame{
MyPanel mp=null;
public MovingBall(){
mp= new MyPanel();
this.add(mp);
this.addKeyListener(mp); //这里加了一句
this.setSize(400,300);
this.setTitle("Moving Ball");
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public static void main(String[] args) {
MovingBall movingBall= new MovingBall();
}
}
class MyPanel extends JPanel implements KeyListener{
int x=10;
int y=10;
public void paint(Graphics g){
super.paint(g);
g.fillOval(x,y,10,10);
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_DOWN){
y++;
}
else if(e.getKeyCode()==KeyEvent.VK_UP){
y--;
}
else if(e.getKeyCode()==KeyEvent.VK_LEFT){
x--;
}
else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
x++;
}
this.repaint();
}
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
⑤ java的KeyEvent类中的VK_ESCAPE是什么意思
KeyEvent类中的VK_ESCAPE是一个常量,对应该键盘上的Esc键。
java的按键事件由KeyEvent封装起来,包含有:getKeyChar获得对应键字符、getKeyCode获得对应键的值等方法。
java的按键事件通过KeyListener接口处理。处理事件必须实现KeyPressed、KeyReleased、KeyTyped三个方法,然后可以在相应方法中去按键事件,如:
switch(keyEvent.getKeyCode()){//keyEvent为KeyEvent对象
case VK_ESCAPE:
//按下Esc键对应的处理
break;
case 其他常量:
//其他处理
break;
......
}
⑥ 关于java KeyEvent的代码,哪里错了求指点。
String c = e.paramString();
switch(c){
String 为何拿来 Switch? 这是不合理的.
int keyCode = e.keyCode() 拿到的才是 按键, 才能用于 switch
⑦ 关于javaKeyEvent按键反应的。懂的前辈帮忙看下
你把keyPressed函数里所有的e.getKeyChar()函数改成e.getKeyCode()函数就行了.
因为e.getKeyChar()函数只对字符键起作用,对控制键不起作用.e.getKeyCode()函数既能识别控制键也能识别小写状态下的wsad按键.
完整的程序如下:
package Draw;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class test2 extends JFrame{
/**
* @param args
*/
dong d=null;
public test2(){
d=new dong();
d.addKeyListener(d);
this.addKeyListener(d);
this.add(d);
this.setSize(200,200);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
// TODO 自动生成方法存根
test2 ts=new test2();
}
}
class dong extends JPanel implements KeyListener{
int x=10;
int y=10;
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.white);
g.fillRect(0, 0, 200,200);
g.setColor(Color.BLACK);
g.fillOval(x, y, 10,10);
}
//键被按下
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_UP||e.getKeyCode()==KeyEvent.VK_W){
System.out.print(e.getKeyCode());
y--;
repaint();
}
if(e.getKeyCode()==KeyEvent.VK_DOWN||e.getKeyCode()==KeyEvent.VK_S){
y++;
repaint();
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT||e.getKeyCode()==KeyEvent.VK_D){
x++;
repaint();
}
if(e.getKeyCode()==KeyEvent.VK_LEFT||e.getKeyCode()==KeyEvent.VK_A){
x--;
repaint();
}
}
public void keyReleased(KeyEvent arg0) {
}
public void keyTyped(KeyEvent arg0) {
}
}