我有一个带有画布的JFrame(亵渎,我知道)。画布有一个附加的MouseListener和KeyListener,并请求使用以下内容聚焦:
canvas.setFocusable(true);
canvas.requestFocusInWindow();
当我第一次运行它时,一切都像预期的那样,事件到处都是。几秒钟后,它停止响应正常的键输入(keyPressed和keyTyped不会被触发)。奇怪的是,拿着三叶草(我在OSX上)让一切正常工作。
有事吗?为什么会发生这种情况,我可以做些什么来修复它?
编辑:我已经搞清楚是什么行为触发了bug。只有当你按住一把钥匙时,它才开始发生。当您释放它时,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上的accents菜单的一些不正当交互引起的。系统默认(至少对优胜美地来说)是当你按住字母键时,它会弹出一个菜单,为你提供重音元音。虽然它没有显示菜单,但它一定是在幕后做了什么,扰乱了焦点。
关闭重音菜单解决了这个问题。对于那些不愿意点击通过的人,请在您的终端中键入以下内容。
defaults write -g ApplePressAndHoldEnabled -bool false
我有一个通过顶点创建的 AWS lambda 函数。我还通过地球形态创建了一个SNS主题和订阅。 我的主题是: 我有一个订阅:<code>arn:aws:sns:ap-southeast-1:178284945954:fetch_realm_auctions:2da1d182-946d-4afd-91cb-1ed3453c5d86 我已经确认这是正确的函数ARN。一切似乎都连接正确: 我手动触发S
我是一个新手,我正在尝试创建一个应用程序来在我的投资组合中使用。本质上,该程序是一个可以访问不同菜单的菜单(json文件:texas_pick.js,Breakth.js…),该程序旨在以按钮的形式显示菜单选项,按钮的详细信息从各自的json文件中检索。我面临的问题是,单击菜单选项时,会检索最后一个菜单项的数据。我将后端编程为只将商品名称和价格推送到数据库,而前端则检索这些数据并将其显示在表上。检
问题内容: 永远不会在我的Angular控制器中触发。下列: 永远不会碰到断点,永远不会弹出警报。我认为这是非常标准的用法,所以我不确定它会是什么,但绝对不会触发。控制器中的其他所有内容均正常运行。 是什么原因造成的? 问题答案: 根据上面的评论,听起来您有这样的事情: 我不确定ng-view标记中的内容会做什么,但是是从ng-view范围 发出 的。这意味着,它只会从上升,因此您的控制器将永远不
我正在制作一个有按钮的鼓应用程序,作为我的鼓。我想要的是按键会在按键时触发,这样用户就可以用键盘击鼓了。 我使用按钮的keyTyped事件来使用键执行声音。它工作得很好,但首先焦点需要首先在那个特定的按钮上,因此我不能在按键时触发这些单独的按钮,因为焦点只有一个按钮。 我能想到的解决方案是:在表单加载时应用多个焦点(如果可能),在按键时使用不同的方式触发按钮事件(而不是通过KeyListener和
本节,我们将使用在画布上下文对象的transform()方法中已经学过的知识,来创建一个自定义的切割变换,使画布上下文在水平方向上发生倾斜。 图4-8 切割画布上下文 绘制步骤 按照以下步骤,绘制一个被切割的矩形: 1. 定义画布上下文及矩形尺寸: window.onload = function(){ var canvas = document.getElementById("myCan
除了平移和旋转,HTML5的画布API还提供了缩放画布上下文的手段。本节,我们将使用scale()方法来按比例缩小画布上下文的高度。 图4-5 缩放画布上下文 绘制步骤 按照以下步骤,绘制一个按比例缩小的矩形: 1. 定义画布上下文,及矩形的尺寸: window.onload = function(){ var canvas = document.getElementById("myCan