繁体   English   中英

java KeyListener没有响应?

[英]java KeyListener not responding?

我有这段代码,绿色方块是可以移动的,但是我没有正确地做所有事情。 它只是聆听的关键似乎没有响应。 我认为周围有错误

addKeyListener(本); 在我的Graphics类中的paintComponent中,可以请您帮忙,告诉我如何解决它以及出了什么问题。

我的主班

   import javax.swing.JFrame;

   public class Main {

static int v = 50;
    static int t = 1;
    public static void main(String[] args) {
    JFrame frame = new JFrame("window");
frame.setVisible(true);
frame.setSize(400,200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Graphics object = new Graphics();

frame.add(object);
while (v > t){
object.Drawing();
}
}
     }

我的图形课

    import java.awt.*;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;

     import javax.swing.*;

    public class Graphics extends JPanel implements KeyListener {

     int x = 0, y= 0, xx = 100, yy = 0, ltyx = 0, ltyyxx = 0, px = 0, py = 0;

public void Drawing(){
    repaint();
        }

public void paintComponent (java.awt.Graphics g){
    super.paintComponent (g);
    addKeyListener(this);
    setBackground(Color.WHITE);
     g.setColor(Color.GREEN);
        g.fillRect(px, py, 25, 25);
    g.setColor(Color.BLUE);
    g.fillRect(x, y, 50, 50);
    g.setColor(Color.RED);
    g.fillRect(xx, yy, 50, 50);
    g.drawString("times looped around screen Blue : " + ltyx , 10, 10);
    g.drawString("Red : " + ltyyxx , 170, 20);

    x++;
    xx++;
    if (x > 400){
    x = 0;
    y += 50;
    }
    if (xx > 400){
        xx = 0;
        yy += 50;
        }
    if (y > 200){
    y = 0;
    ltyx++;
    }  
    if (yy > 200){
            yy = 0;
            ltyyxx++;
            }
    }

public void keyPressed(KeyEvent e) {
    switch(e.getKeyCode()){
    case KeyEvent.VK_RIGHT:{
        px++;
    break;
    }
        case KeyEvent.VK_LEFT:{
        px--;
    break;
      }
     case KeyEvent.VK_UP:{
py++;
     break;
     }
     case KeyEvent.VK_DOWN:{
py--;
     break;
     }
    }
}

         public void keyReleased(KeyEvent e) {
    switch(e.getKeyCode()){
    case KeyEvent.VK_RIGHT:{
        px = 0;
    break;
    }
     case KeyEvent.VK_LEFT:{
        px = 0;
    break;
     }
     case KeyEvent.VK_UP:{
py = 0;
     break;
     }
     case KeyEvent.VK_DOWN:{
py = 0;
     break;
     }
    }
}

public void keyTyped(KeyEvent e) {

}

}

用户界面中有“焦点”的概念。 仅当前保持焦点的组件直接接收关键事件。 例如,这就是打字时屏幕上一个文本框而不是其他任何文本框的响应方式。

frame.add(object); ,添加:

object.setFocusable(true);
object.requestFocusInWindow();

另外, addKeyListener(this); 通话位置错误。 每次绘制组件时,它将添加另一个键侦听器。 应该只调用一次,最好在面板的构造函数中调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM