2011-06-29 10 views
4

これは単純な動作のようですが、問題を起こすのが難しいです。私はデータをグラフ化するソフトウェアに取り組んでいます。ユーザーがEnterキーを押したときにグラフを再描画したい。もっと正確には、ユーザーが入力を押して選択されたテキストフィールドを持っていないときに、グラフを描画したいと思います。今のところ、ユーザーがエンターを押すたびに描画に満足しています。フレーム内でキーを押す

まずフレームに基本KeyListenerをインストールしようとしましたが、フレームではなくJFrameの子供がイベントを受信するため、動作しません。

私はKeyEventDispatcherを使用しようとしましたが、それはあまりにもグローバルな概念を証明しています。一度に2つのグラフを画面に表示でき、古いグラフを閉じたり、新しいグラフに置き換えることができます。 KeyEventDispatcherでは、一度に複数のプロットを開いて、どのプロットを開くかを簡単に知る方法がなく、現在開いているプロットは、キーディスパッチャーをインスタンス化したときに開いたプロットではない可能性があります。私はこの解決策がまだ機能することは知っていますが、プログラム・アーキテクチャーにうまく収まらないプロットが現在アクティブなプロットに関する追加データを格納する必要があります。

KeyEventsJFrame/JPanelまたはJFrame'sの子にディスパッチする方が簡単な方法があるようです。他のフレームにディスパッチされたイベントは無視されます。フレームに付加することができ、フレームが配置されたときに自動的に配置される方法が好ましい。誰も私が試したより簡単な方法を提案することができますか?

答えて

2

KeyListenerを使用しないでください。

Key Bindingをグラフパネルに追加します。

+0

ありがとうございます。そこには簡単な方法がなければならないことは分かっていましたが、私自身はそれを偶然見つけられませんでした。 – drew

0

This works very well

this.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "fecharAction"); 
    this.getRootPane().getActionMap().put("fecharAction", new AbstractAction() { 
     private static final long serialVersionUID = 1L; 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      int resp = JOptionPane.showConfirmDialog(MainForm.this, "Encerrar sistema?", "Confirmação", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); 
      if (resp == 0) { 
       MainForm.this.setVisible(false); 
       MainForm.this.dispose(); 
      } 
     } 
    }); 
関連する問題