2014-08-27 36 views
1

我在嘗試構建一個NetBeans模塊,該模塊將包含一個選項面板,用戶必須在其中輸入憑據和首選項以及一些跟蹤NetBeans主編輯器窗格中源代碼的代碼。NetBeans插件開發活動編輯器中的用戶事件

目標是通過成功登錄用戶來激活插件,然後該插件將簡單地偵聽預定義的事件,從而觸發其在編輯器中捕獲代碼。我不希望用戶必須單擊菜單欄中的某個項目或某個按鈕來觸發代碼的捕獲。它一定是不顯眼的。

我有幾個選項。我想讓這個插件收集源代碼Ctrl + S動作或用戶按Enter鍵,上,下,右,左鍵和/或其他。

但是,如何將這些類型的事件偵聽器添加到TopComponent或活動的NetBeans編輯器中,以便跟蹤NetBeans中的用戶活動?如何檢測用戶何時按下編輯器中的某些鍵?

回答

2

我終於解決了我的問題。

我使用下面的代碼片段來獲取NetBeans編輯器的活動JTextComponent,然後將KeyEventListeners添加到它,並且它完美地工作。

JTextComponent jtc = EditorRegistry.lastFocusedComponent(); 

jtc.addKeyListener(new KeyListener() { 

     @Override 
     public void keyTyped(KeyEvent e) { 
      int keycode = e.getKeyCode(); 
      switch (keycode) { 
       case KeyEvent.VK_LEFT: 
        JOptionPane.showMessageDialog(null, "1 Left: " + e.getKeyCode()); 
        break; 
       case KeyEvent.VK_RIGHT: 
        JOptionPane.showMessageDialog(null, "1 Right: " + e.getKeyCode()); 
        break; 
       case KeyEvent.VK_DOWN: 
        JOptionPane.showMessageDialog(null, "1 Down: " + e.getKeyCode()); 
        break; 
       case KeyEvent.VK_UP: 
        JOptionPane.showMessageDialog(null, "1 Up: " + e.getKeyCode()); 
        break; 
       case KeyEvent.VK_ENTER: 
        JOptionPane.showMessageDialog(null, "Enter: "+e.getKeyCode()); 
        break; 
      } 
     } 

     @Override 
     public void keyPressed(KeyEvent e) { 
      int keycode = e.getKeyCode(); 
      switch (keycode) { 
       case KeyEvent.VK_LEFT: 
        JOptionPane.showMessageDialog(null, "2 Left: " + e.getKeyCode()); 
        break; 
       case KeyEvent.VK_RIGHT: 
        JOptionPane.showMessageDialog(null, "2 Right: " + e.getKeyCode()); 
        break; 
       case KeyEvent.VK_DOWN: 
        JOptionPane.showMessageDialog(null, "2 Down: " + e.getKeyCode()); 
        break; 
       case KeyEvent.VK_UP: 
        JOptionPane.showMessageDialog(null, "2 Up: " + e.getKeyCode()); 
        break; 
       case KeyEvent.VK_ENTER: 
        JOptionPane.showMessageDialog(null, "Enter: "+e.getKeyCode()); 
        break; 
      } 
     } 

     @Override 
     public void keyReleased(KeyEvent e) { 
      int keycode = e.getKeyCode(); 
      switch (keycode) { 
       case KeyEvent.VK_LEFT: 
        JOptionPane.showMessageDialog(null, "3 Left: " + e.getKeyCode()); 
        break; 
       case KeyEvent.VK_RIGHT: 
        JOptionPane.showMessageDialog(null, "3 Right: " + e.getKeyCode()); 
        break; 
       case KeyEvent.VK_DOWN: 
        JOptionPane.showMessageDialog(null, "3 Down: " + e.getKeyCode()); 
        break; 
       case KeyEvent.VK_UP: 
        JOptionPane.showMessageDialog(null, "3 Up: " + e.getKeyCode()); 
        break; 
       case KeyEvent.VK_ENTER: 
        JOptionPane.showMessageDialog(null, "Enter: "+e.getKeyCode()); 
        break; 
      } 
     } 
    }); 

所以這個插件,現在允許我捕捉與利用的關鍵事件活動的NetBeans代碼編輯器的用戶交互。