- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试通过重写书中的问题来学习按键绑定(bind),这些问题是我之前使用 KeyListener 解决的。我正在努力使用按键绑定(bind)解决的问题需要我记录已输入的消息并将其显示在面板上。
使用 KeyListener 解决这个问题的方法很简单,就是使用 keyTyped() 方法记录带有 unicode 的字符,并使用 keyPressed 读取修饰符/非 Unicode 键。如果 KeyEvent.VK_ENTER 与键事件中的键码匹配,则会在面板上显示该字符串。
~~~~~~~~~
我认为可以用KeyBinds类似的方式解决。它在 KeyEvent 文档中说,每次输入字符时都会触发 KeyEvent.KEY_TYPED。我认为这意味着每个具有相应 Unicode 的字符都可以像在 KeyListener 中一样输入。
后来,我意识到我不知道如何检索该字符,因为 Oracle 关于 KeyBinds 的教程说,调用 actionPerformed() 时会消耗 KeyEvent。
这是我认为可以使用 KeyBindings 将键入的键记录到 StringBuilder 的代码:
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.KEY_TYPED, 0), "recordTypedKey");
getActionMap().put("recordTypedKey", addCharToString);
除了为每个字符添加一个键并使用单独的 Action 事件来记录它们之外,是否还有一种方法可以获得调用 KeyListener 的 keyTyped() 方法的字符?
最佳答案
Is there a way to obtain the characters that would invoke KeyListener's keyTyped() method besides adding a key to every one of them and using a separate Action event to record them?
我不相信有一个全局的KeyStroke
可以传递给InputMap,它的工作方式与KeyListener类似,因为KeyBindings在单个键的基础上工作。不过,您可以创建单个 Action 并通过循环处理您希望处理的 char 值来将键绑定(bind)到它 - 在 ActionListener 实现中,您可以通过 getActionCommand 获取键的值。例如处理a-z:
AbstractAction action = new AbstractAction(){
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand());
}
};
//loop over the ascii char values
for ( char a = 'A'; a <= 'Z'; a++ ){
panel.getInputMap().put(KeyStroke.getKeyStroke(Character.toString(a)), "recordTypedKey");
}
panel.getActionMap().put("recordTypedKey", action);
如果需要,您可以添加修饰符...例如处理 Shift 键(例如大写),
panel.getInputMap().put(KeyStroke.getKeyStroke("shift " + Character.toString(a)), "recordTypedKey");
关于Java Swing : KeyBinding for KEY_TYPED event,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38706950/
我正在制作一款带有简单库存系统的视频游戏。我正在尝试做到这一点,以便每当您按下“Z”键时,它都会显示或隐藏库存 GUI。我不知道为什么,但是 KEY_TYPED 按键事件不起作用。 KEY_PRESS
我有一个带有许多文本字段的Java应用程序,我可以通过按`然后按e输入例如é。这是许多应用程序中已知的行为。 现在,在特定的用户操作(启动应用程序的特定模块)之后,应用程序中的所有文本字段将无法键入
我有一个 KeyboardFocusManager 具有覆盖的 dispatchKeyEvent() 方法来处理箭头键和输入的导航。只要按键被按下,我就需要处理按键事件。不幸的是,按住 enter 会
我一直在尝试通过重写书中的问题来学习按键绑定(bind),这些问题是我之前使用 KeyListener 解决的。我正在努力使用按键绑定(bind)解决的问题需要我记录已输入的消息并将其显示在面板上。
我编写这段代码是为了检查 std::map 是否存在包含一个特定的键: template inline bool contains(const std::map& map, const T& valu
我有一个类模板 ID ,目前使用对象的地址作为其标识符。 我想对此类模板进行专门化,这样如果 T有一个 key_type定义,我会调用get_key()在对象上并将其用作标识符。当然,我也会存储那个值
我有一个在标准容器上运行的 X 类。以 value_type 作为参数的函数必须调用以 key_type 作为参数的函数。我怎么做?我看起来很基础。 template class X { void
std::map::find接受 const key_type&作为论据。这样,它要求参数可转换为 key_type .这对我来说似乎是一个疏忽,因为该参数不必可转换为key_type。 ,它只需要与
我正在尝试创建一个以 xercesc::XMLUri 作为键类型的 std::unordered_map。 #include #include "xercesc/util/XMLUri.hpp" i
我想出了以下代码,它演示了一种在 STL 集合上进行通用迭代并获取键值的技术,而不管键的存储方式如何。 这里的上下文是我正在重构两个函数,它们都在两个集合上运行相同的功能:一个是 set另一个是 ma
我有一个这样的容器: // Sort functor struct SortByTime : std::binary_function { bool operator()(const Ti
我在 std::map 中自定义比较,如下所示。 class my_cmp { public: bool operator()(const string &a, const string &b)
我有一张 map : std::map myMap; 但是,在某些情况下,我想通过比较 TyString == TyStringRef 来std::map::find 一个条目,即 myMap.fin
我对以下 C 代码行感到有点困惑: typedef void* key_type; 这是否意味着 key_type 是一个空指针?我想这是比 C 编程中的 void* 更直观的命名。 - 谢谢 最佳答
这是我对 Box 类的实现: class Box { friend ostream& operator bmap; bmap.insert(pair(b1, 10)); bma
最近去使用std::unordered_map::erase,发现函数有一些重载: Link to cppreferences iterator erase( const_iterator pos )
我正在跟踪一个错误,但遇到了非常奇怪的行为。我有一组指针,当我一个一个地删除它们时,第一个删除,但删除另一个给我段错误。我用 size_type erase( const key_type& k
I am thinking from Java help:The complete reference(8th Ed) by Herbert Schildt to learn about Java.在
这是我的情况的说明。我有一个 std::map我想找到第一个 pair其中 key 是 key 等价类的任何成员。 #include struct Category { int foo;
我有一个类(class)目录类,它有一个 map Courses 类型的私有(private)变量.我想重载 ,你可以重载 <<对于 CourseInfo : std::ostream& operat
我是一名优秀的程序员,十分优秀!