Java KeyListener 在小程序中不起作用

Posted

技术标签:

【中文标题】Java KeyListener 在小程序中不起作用【英文标题】:Java KeyListener is not working in applet 【发布时间】:2016-05-25 00:15:13 【问题描述】:

谁能告诉我有什么问题?我试图让广场上下移动。 当我运行小程序时,正方形会在正确的位置创建,但是当我按下 UP 键或 DOWN 键时没有任何反应。

    package pong;

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class pong extends Applet implements KeyListener

    private Rectangle rect = null;
    private int key = 0;

    public void init()
    
        rect = new Rectangle(0,0,10,10);    
        addKeyListener(this);
    

    public void paint(Graphics g)
    
        setSize(200,200);
        Graphics2D g2 = (Graphics2D)g;
        g2.fill(rect);
    

    @Override
    public void keyPressed(KeyEvent e) 
    
        key = e.getKeyCode();
    

    public void update()
    
        if(key == KeyEvent.VK_UP)
        
            rect.setLocation(rect.x, rect.y - 2);
        
        else if(key == KeyEvent.VK_DOWN)
        
            rect.setLocation(rect.x, rect.y + 2);
        
    

    @Override
    public void keyReleased(KeyEvent e) 
        // TODO Auto-generated method stub

    

    @Override
    public void keyTyped(KeyEvent e) 
        // TODO Auto-generated method stub

    


【问题讨论】:

仅供参考:不再支持小程序插件,实际上使小程序被弃用。我会考虑从 Swing(并使用键绑定 API)或 JavaFX 开始 1) 为什么要编写小程序?如果是老师指定的,请参考Why CS teachers should stop teaching Java applets。 2) 为什么使用 AWT?请参阅this answer 以了解放弃使用支持 Swing 的组件的 AWT 的许多充分理由。 3) 对于 Swing,我们通常使用key bindings 而不是较低级别的KeyListener 【参考方案1】:

keyPressed时需要调用update方法

 @Override
    public void keyPressed(KeyEvent e) 
    
        key = e.getKeyCode();
           update();

    

【讨论】:

以上是关于Java KeyListener 在小程序中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Marquee 在小部件中不起作用?

Setstate 在小部件列表中不起作用

isPlaceholder 修饰符不可用且在小部件工具包 + SwiftUI 中不起作用

简单的 KeyListener 不起作用

单击按钮后keylistener不起作用

@font-face 在 Firefox 中不起作用 [重复]