2011-06-29 48 views
4

這似乎是一個簡單的行爲,但我很難做到這一點。我正在研究繪製數據的軟件。我想在用戶輸入時重新繪製圖形。更準確地說,我想在用戶點擊輸入並且沒有選擇文本字段時繪製圖表;但現在,只要用戶輸入,我就會滿意於繪圖。拍框內的按鍵

我試着先安裝一個基本的KeyListener框架,但這不起作用,因爲JFrame孩子,而不是框架,接收事件。

然後,我試圖使用KeyEventDispatcher,但它證明太全球化的概念。我可以一次在屏幕上顯示兩個圖形,並且可以關閉舊圖形或用新圖形替換舊圖形。用KeyEventDispatcher我沒有簡單的方法來知道我想要激活多個地塊一次打開哪個地塊,現在打開的地塊可能不是我實例化關鍵調度員時打開的地塊。我知道這個解決方案仍然可以工作,但它需要我存儲額外的數據,以確定哪些情節目前處於活動狀態,並不適合程序架構。

看起來好像應該有一種更簡單的方法來捕獲任何發送給JFrame/JPanel或任何JFrame's兒童的KeyEvents;但忽略分派給其他框架的事件。優選的可以添加到框架並因此在框架被佈置時自動佈置的方法。任何人都可以提出一個更簡單的方法,然後我試過了嗎?

回答

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(); 
      } 
     } 
    });