当前位置: 首页 > 知识库问答 >
问题:

如何区分常用印刷的键盘键和其他键

齐宗清
2023-03-14

我想收集键盘输入并将其附加到java StringBuilder中,但使用LWJGL的键盘事件,我最终获取了比我希望的更多的内容,如Shift、CapsLock、Escape、F1到F12、Enter,甚至标点符号等。。这些键也有键ID,但通过附加它们,它们被打印成正方形(我相信是无法识别的字符)。

我的目标是忽略这些不可打印的键,而不必创建包含所有这些不需要的键的巨大阵列。有什么办法吗?

请注意,我希望像\,.-这样的常见符号

共有2个答案

戚兴邦
2023-03-14

多亏了Mark W,我刚刚发现ASCII的范围从32到126和128到255,我相信涵盖了日常文本编辑器中常见的每一个字符。谢谢一堆:)

下面是一个对使用lwjgl的人可能有用的最小代码块

private StringBuilder text;

    private void updateInput()
    {
        while (Keyboard.next())
        {
            if (Keyboard.getEventKeyState())
            {
                // get key info
                int key = Keyboard.getEventKey();
                char ch = Keyboard.getEventCharacter();
                int ascii = (int) ch;

                // delete case
                if(key == Keyboard.KEY_BACK)
                    text.setLength(Math.max(0, text.length() - 1));

                // append if common char
                if((ascii >= 32 && ascii <= 126) || (ascii >= 128 && ascii <= 255))
                    text.append(ch);
            }
        }
    }
司马腾
2023-03-14

这是一个你可以使用的例子。然后将此示例用作内部类,并使用它代替组件上的常规ActionListener。此示例捕获事件的键代码(使用KeyEvent)。我在你的问题中列举了一些例子,我相信如果需要的话,你会发现更多。

在switch语句的每种情况下,都应该在现有字符串中附加一个自定义字符串。

public class CustomListener extends KeyAdapter {
        @Override
        public void keyPressed(KeyEvent e) {
            try {
                int keyCode = e.getKeyCode();
                switch (keyCode) {
                        case KeyEvent.VK_SHIFT:
                            //Append a string to your existing string
                            break;
                        case KeyEvent.VK_F1:
                            //Append a string to your existing string
                            break;
                        case KeyEvent.VK_CAPS_LOCK:
                            //Append a string to your existing string
                            break;
                        case KeyEvent.VK_ENTER:
                            //Append a string to your existing string
                            break;
                    }
                }
            } catch (NullPointerException e1) {
                e1.printStackTrace();
            }
        }
    }
 类似资料:
  • 今天我试着在iPod(iOS 6.1.3)上运行我的代码,我在这里发现了一些有趣的东西。。。 首先,当我点击textfield时,键盘会出现,但当我点击文本字段以外的其他地方时,键盘不会隐藏。 所以我决定谷歌搜索并找到这个解决方案: 它工作了…它在键盘底部给出了一个“完成”按钮,现在可以通过按下它来隐藏键盘。 但我这里有2个问题: < li >键盘仅在点击"完成"按钮时隐藏。而不是通过点击文本字段

  • 问题内容: 在PostgreSQL中,我有一个数据库,我打算进行以下表声明: 一切正常,除了在创建最后一个表(更正)时出现以下错误: 错误:没有唯一的约束匹配给定键的引用表“提交” 我对更正表的打算是对每个提交都有唯一的更正,但是一个提交可以(也可以不)具有更正。 我该如何解决这个错误?是设计问题还是表声明错误? 问题答案: 外键约束不关心所引用的列是否在引用另一列本身。但是引用的列 必须 是唯一

  • 我试图查询具有分区键和排序键的表(但是分区键和排序键是1:1,我只想使用分区键[仅返回一项]进行查询)。 这是我尝试过的代码,但没有成功(testId是分区键名,1234567890是字符串形式的分区键值);你们都知道我可以只使用分区键进行查询的方法吗?记住,由于分区键和排序键是1:1,所以只会返回一个项?提前非常感谢您。[这是我的第一篇堆栈溢出帖子-很抱歉,如果我用词不当,我很乐意回答关于我的措

  • 是否隐藏聊窗键盘区域预览图片长图、GIF标识 /** 是否隐藏聊窗键盘区域预览图片长图、GIF标识 @param isHidden 是否隐藏(默认显示) */ [Ntalker ntalker_isHiddenLongImageOrGifLogo:NO];

  • Eclipse具有很好的可发现性,因为有一个列出所有键盘快捷键的键盘快捷键。在Mac电脑上,这将是Cmd Shift L,所以在pc上,我想这将是Ctrl Shift L。 有没有一款IntelliJ idea键盘可以实现同样的功能?? (…这样我可以在工作中通过实践学习) 顺便说一句,我正在使用12.1.4社区版。

  • 问题内容: 如何使用jQuery获取单击的鼠标按钮? 这是由鼠标右键和鼠标左键触发的,能捕捉鼠标右键的方式是什么?如果以下内容存在,我将很高兴: 问题答案: 从jQuery 1.1.3版开始,规范化了,因此您不必担心浏览器兼容性问题。有关文档 分别为鼠标左键,鼠标中键和鼠标右键提供1、2或3,因此: