- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 JFrame,里面有一个 Canvas(我知道这是亵渎)。 Canvas 有一个附加的 MouseListener 和 KeyListener,并通过以下方式请求焦点:
canvas.setFocusable(true);
canvas.requestFocusInWindow();
当我第一次运行它时,一切都按预期运行,事件到处乱飞。几秒钟后,它停止响应正常的按键输入(未触发 keyPressed 和 keyTyped)。奇怪的是,拿着三叶草(我在 OSX 上)使一切正常工作。
发生什么事了?为什么会发生这种情况以及我可以采取什么措施来解决它?
编辑:我已经弄清楚什么行为会触发该错误。只有当您按住某个键时,它才会开始发生。当您释放它时,keyPressed 事件停止触发。以下是我的 MCVE。
import java.awt.Canvas;
import java.awt.Graphics2D;
import java.awt.Dimension;
import java.awt.image.BufferStrategy;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
public class Listener implements MouseListener,KeyListener {
JFrame frame;
Canvas screen;
public Listener() {
// initialize the screen canvas
screen = new Canvas();
Dimension size = new Dimension(640, 480);
screen.setMinimumSize(size);
screen.setMaximumSize(size);
screen.setPreferredSize(size);
screen.addMouseListener(this);
screen.addKeyListener(this);
screen.setFocusable(true);
// initialize the frame
frame = new JFrame("Parasite");
frame.add(screen);
frame.pack();
frame.setVisible(true);
screen.requestFocusInWindow();
// create buffer strategy (after showing frame)
screen.createBufferStrategy(2);
}
public static void main(String[] args) {
Listener listener = new Listener();
}
public void mouseClicked(MouseEvent e) {
System.out.println("click");
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void keyTyped(KeyEvent e) {
System.out.println("t " + e.getKeyChar());
}
public void keyPressed(KeyEvent e) {
System.out.println("p " + e.getKeyChar());
}
public void keyReleased(KeyEvent e) {
System.out.println("r " + e.getKeyChar());
}
}
最佳答案
事实证明,该错误是由与 osx 上的重音菜单的一些不正当交互引起的。系统默认(至少对于优胜美地)是当您按住字母键时弹出一个菜单,为您提供重音元音。虽然它没有显示菜单,但它一定在幕后做了一些扰乱焦点的事情。
Turning off the accents menu解决了问题。对于那些不愿意点击的人,请在终端中输入以下内容。
defaults write -g ApplePressAndHoldEnabled -bool false
关于java - Canvas 上的 KeyListener : keyReleased triggering, 但没有 keyPressed 或 keyTyped,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27115966/
我在创建此类时收到两个错误。第一个出现在: public class DisplayerDeluxe extends JPanel implements ActionListener, KeyList
如果两个 jtextfield 为空或不为空,我将使用 keyReleased 来启用或禁用 jbutton。我在方法中放置了一些打印行语句,以在方法执行时查看 boolean 值。这些语句从未打印,
编写一个程序,根据给出的指令绘制形状。这是说明。但是,每当我编译时,我都会收到消息 DrawShapes is not abstract and does not override abstract
我在捕获关键发布事件以阻止我的角色在我的游戏中行走时遇到了一点问题.. 我正在尝试这样做: switch (xev.type) { case Expose: {
我试图让我的角色左右移动,然后当你将手指从左或右箭头键上移开时停止,但不断发生的事情是他继续前进。这是我的按键: public void keyPressed(KeyEvent e) {
我正在尝试用java制作一个游戏,只是一个简单的平台游戏,但运行代码时遇到困难。我似乎无法从按键中得到任何响应。我认为唯一不能正常工作的是 keyPressed 和 keyReleased 函数。下面
我正在使用 JComboBox 从 SQL DB 中搜索查询。我想在输入字母时搜索查询。我正在使用 NetBeans IDE。这是自动代码。 srch.addKeyListener(new java.
我正在尝试制作两个能够在所有 4 个方向上移动的对象(向上、向下、向右、向左)。第一个对象应使用 W、S、D、A 控制 - 而第二个对象应使用向上、向下、向右、向左箭头控制,并且可以正常工作。 但是,
我正在使用 Java 制作 2D 游戏,并且有一个关键监听器来处理玩家 Action 和其他内容。大多数时候它工作得很好。然而,有时它会出现故障。例如,我将按住“A”键使角色向左移动,当我松开它时,角
正如标题所说,KeyRelease 事件在 Mac OS X 上的全屏模式下根本不会被触发(尚未测试 Linux/Windows,也可能被破坏)。 代码如下: sf::ContextSettings
当用户按下四个箭头键(或 wasd)时,我试图让角色在一个简单的框架上移动。只要按住箭头键,角色就应该继续移动,一旦用户释放按键,角色就应该停止移动。 在很大程度上,这是令人感动的。然而,当快速切换方
所以,我正在使用 swing,我需要找到一个干净的(非 CPU 占用方式)来在文本字段上引入延迟。基本上,用户将在该字段中输入一个数字,keyReleased() 事件会检查输入是否符合一些参数,然后
我想记录所有传入的按键事件,无论哪个窗口处于焦点或指针在哪里。我已经编写了示例代码,它应该捕获当前窗口的按键事件(见下文)。为了保持我的代码可读性,我只给出了焦点窗口的示例代码。由于我的最终目标是捕捉
我想用 python xlib 捕获 keydown 和 keyup 事件,但是当同时按下某些键时,keyup 事件会消失。 如果同时释放 2 个或更多键,则将有 2 个或更多按键事件,但只有 1 个
我正在制作一个简单的电子队列,但遇到了困难。 我想让管理员登录在按下某个键并单击“登录”按钮时弹出(有更好的方法吗?),所以我让该类实现 KeyListener。但是 keyPressed()、key
在 PC 上,我可以为 JTextField 添加 onKeyListener 来监听 keyReleased 事件。在 Android 上,我使用了 addTextChangedListener。
我有一个实现 KeyListener 的 KeyHandler 类。除了左箭头键和右箭头键之外的所有键都可以工作,它们记录为按下但从未释放(向上和向下箭头可以工作,就像所有其他键一样)。键监听器被添加
在下面的代码中,如果我使用 KeyRelease 绑定(bind)事件,那么在点击 return 键时会导致文本小部件中出现不需要的新行。但是,如果我使用 KeyPress 绑定(bind)事件,则不
当我尝试在 Tkinter Text 小部件上使用 KeyRelease 事件时,它有时在 event.char 中提供小写字符,但在文本小部件中显示大写字符。当我轻快地按下 Shift 按钮,然后按
当我按下某个键一段时间后,在 keyReleased 函数中,该键的背景颜色并没有恢复到原来的颜色。我做错了什么。如果您可以将我重定向到某个站点,该站点包含有关如何通过示例制作此类程序的教程,那将非常
我是一名优秀的程序员,十分优秀!