① 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) {
}
}