java - 混搭键导致无效输入

标签 java swing events

我在演示我的程序时,基本上是通过在数字键盘上敲击按键来快速获取一些虚拟数据,我发现这偶尔会导致输入无效输入。这似乎是某种线程问题,但我对 Swing 事件的理解是它们基本上是从同一线程按顺序触发的。我没有明确地创建我自己的任何线程,但我正在使用 paintComponent(Graphics g) 进行大量自定义绘画。大多数按键最终会触发堆栈深处的 repaint()。这会导致我的问题吗?为什么?如果是这样,知道如何解决吗?如果不是,知道它可能是什么吗?

另外,有谁知道如何对此进行自动化测试吗?相关的事件处理程序如下所示。

public void keyTyped(KeyEvent e)
{
    if (e.getKeyChar() == myKeyChar)
        runPrimaryFunction(); // Does some calculations and triggers a repaint
}

public void keyPressed(KeyEvent e)
{
    if (e.getKeyCode() == myKeyCode)
        runPrimaryFunction();
}

/********* Another class listening to the same JFrame ********/

public void keyPressed(KeyEvent e)
{
    if (e.getKeyCode() == KeyEvent.VK_UP)
    {
        scrollUp();
        repaint();
    }
    else if (e.getKeyCode() == KeyEvent.VK_DOWN)
    {
        scrollDown();
        repaint();
    }
}

最佳答案

你几乎肯定会使用 Key Bindings .默认情况下,箭头键通常绑定(bind)到滚动 Pane 操作,您可以自己调用这些操作,如图所示 here .还可以考虑实现 Scrollable界面。

如果您使用 Key Listener ,请注意这个本质区别:keyTyped() “事件发生在按下键后紧接着释放键时。” KeyEventDemo说明了事件是如何交错的。

关于java - 混搭键导致无效输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15028086/

相关文章:

java - 无法在 mac 终端中设置类路径

Java Canvas绘制图像闪烁

c# - 为可序列化模型对象编写事件处理程序的正确方法是什么?

jquery - jquery防止点击事件

java - 在根节点之前和 org.w3c.dom 的序言之后插入/附加注释时出现问题

java - JTable标题焦点查询?

java - 刷新 JTree 内容

java - JPanels 不会出现在 Cardlayout 容器中

c++ - 设计最快的页面下载

java - 使用 Selenium 找出选择了哪个单选按钮(实现为 li)