2

KeyEvents を試した後、キー バインディングに切り替えて、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();
                        }

このコードは 3 つの異なるキー バインディングをカバーしていますが、何も機能しません。上下左右に押しても、カーソルは TextArea 内でその方向に移動するだけです。今回は何を間違えたのだろう。私を助けてください!

4

1 に答える 1

3

上下左右を押しても、カーソルは TextArea 内でその方向に移動します。

KeyStroke を正しく構築していません。キーストロークに「VK_」を含めないでください。したがって、基本的には何も InputMap に追加されていません。

また、コードは InputMap と ActionMap を新しい識別子で更新しています。ActionMap の Action を置き換えるだけの方が簡単だと思います。すべてのデフォルト アクションのリストとデフォルト アクションの基本コードについては、キー バインディングを参照してくださいreplacing(これは、前回の投稿で得たものとは別のリンクです)。

最後に、他の投稿で、ボタンのアクションを呼び出したいと提案しました。それでは、ボタンとキー バインドで使用できるアクションをコードで作成する必要があります。ActionListener を実装する代わりに AbstractAction を拡張することを除いて、ActionListener を作成するのと同じ方法で Action を作成します。

于 2013-09-22T22:53:05.730 に答える