2

尝试过 KeyEvents 后,建议我切换到 Key Bindings 以通过在 TextArea 中按下箭头键来激活某些事件

                        area.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
                    .put(KeyStroke.getKeyStroke("VK_UP"), 
                            "doEnterAction");
                    area.getActionMap().put("doEnterAction", new AbstractAction(){
                        @Override
                        public void actionPerformed(ActionEvent e){
                            System.out.println("Event Handled");
                            oneRay[pick][0] = ("");
                             if(i>=4){
                                 i=0;
                                 area.setText("");
                             }
                            caller();
                        }
                    });

                    area.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
                    .put(KeyStroke.getKeyStroke("VK_DOWN"), 
                            "doEnterAction");
                    area.getActionMap().put("doEnterAction", new AbstractAction(){
                        @Override
                        public void actionPerformed(ActionEvent e){
                            System.out.println("Event 2 Handled");
                            area.append("\n"+oneRay[pick][1]);
                             buton1.setEnabled(true);
                             buton2.setEnabled(true);
                        }
                    });

                    area.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
                    .put(KeyStroke.getKeyStroke("VK_RIGHT"), 
                            "doEnterAction");
                    area.getActionMap().put("doEnterAction", new AbstractAction(){
                        @Override
                        public void actionPerformed(ActionEvent e){
                             if(i>=4){
                                 i=0;
                                 area.setText("");
                             }
                             caller();
                        }

这段代码涵盖了三个不同的键绑定,但没有一个工作,无论我按下左下右光标只是在 TextArea 中的那个方向移动。这次我做错了什么。请帮我!

4

1 回答 1

3

我是否按下左上右光标只是在 TextArea 中朝那个方向移动。

您正在错误地构建 KeyStroke。您不应该在按键中包含“VK_”。所以基本上没有任何东西被添加到 InputMap 中。

此外,您的代码正在使用新标识符更新 InputMap 和 ActionMap。我发现只替换 ActionMap 中的 Action 更容易。有关所有默认操作的列表以及默认操作的基本代码,请参阅键绑定replacing(这与您在上次发布中获得的链接不同)。

最后,在您的其他帖子中,您建议您要调用按钮的操作。那么您的代码应该创建一个可供按钮和键绑定使用的操作。您创建 Action 的方式与创建 ActionListener 的方式相同,只是您扩展 AbstractAction 而不是实现 ActionListener。

于 2013-09-22T22:53:05.730 回答