作为KeyEvent替代的键绑定仍然无法正常工作

时间:2013-09-22 22:44:44

标签: java swing binding key-bindings

尝试过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中向那个方向移动。 这次我做错了什么请帮帮我!

1 个答案:

答案 0 :(得分:3)

  

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

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

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

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