【问题标题】:KeyListener not work in object [duplicate]KeyListener 在对象中不起作用[重复]
【发布时间】:2023-04-03 19:30:01
【问题描述】:

我遇到了 KeyListener 的问题。我创建类gra 在哪里是完整的代码需要在构造函数中玩俄罗斯方块游戏我只添加KeyListener。在其他班级Menu 我创建对象Gra gra = new Gra() 并在满足条件gra.start(g); 时对其进行整理,但是当我在班级Gra 时,KeyListener 不起作用。请帮我解决这个问题。 他是 gra 班的代码

    import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

import javax.swing.JPanel;

//@SuppressWarnings("serial")
public class Gra extends JPanel implements KeyListener{


    public Gra(){
        addKeyListener(this);
        setFocusable(true);
        requestFocus();
        repaint();
    }
    public  void start(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        setFocusable(true);
        requestFocus();
        repaint();
    }
    @Override
    public void keyPressed(KeyEvent arg0) {
        // TODO Auto-generated method stub
        System.err.println("sdfafs");
        char c = arg0.getKeyChar();
        System.err.println(c);
    }

    @Override
    public void keyReleased(KeyEvent arg0) {
        // TODO Auto-generated method stub
        char c = arg0.getKeyChar();
        System.err.println(c);
    }

    @Override
    public void keyTyped(KeyEvent arg0) {
        // TODO Auto-generated method stub
        char c = arg0.getKeyChar();
        System.err.println(c);

    }

}

【问题讨论】:

  • setFocusable(true); 可以正常工作,但是当它移动到其他组件时,焦点可能随时丢失。
  • 使用mnemonics(所有按钮和选项卡式窗格以及JLabel都支持)和accelerators(菜单项支持)而不是KeyListener
  • 我回答的java keylistener not calledthis one answered by MadProgrammer 的可能重复项。此问题有 很多 个重复项。

标签: java swing keylistener


【解决方案1】:

KeyListener 非常善变。它注册到的组件必须是可聚焦的并且具有焦点。组件失去焦点的方式有很多种,或者根据系统的不同,在请求时无法获得焦点。

改为使用key bindings API,因为它允许您配置将触发关键事件的焦点级别

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 2019-01-04
    • 2011-10-08
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多