2012-11-16 41 views
1

我有一個JComboBox,其中包含多個值。如何檢測按鍵control-option-space在MAC中打開彈出窗口JComboBoxControl-Option-Space鍵用於在帶有Voiceover實用程序的MAC中的JCombobox中打開Popup

+0

您最近的[編輯](http://stackoverflow.com/posts/13410975/revisions)可能代表一個新問題;爲了測試,我在下面添加了一個[sscce](http://sscce.org/);如果您在其他地方發帖,請參考本問答。 [Ask Different](http://apple.stackexchange.com/)。 – trashgod

+0

另請參閱本[問與答](http://apple.stackexchange.com/q/71915/20589)。 – trashgod

回答

3

目前還不清楚您是否想要control-option-space密鑰綁定,或者替代標準space密鑰。無論哪種情況,您都可以使用如下所示的綁定來喚起aquaSpacePressed操作。有關詳細信息,請參閱如何使用密鑰綁定

combo.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
    KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 
     KeyEvent.ALT_DOWN_MASK | KeyEvent.CTRL_DOWN_MASK), 
    "aquaSpacePressed"); 

因爲這是Mac特有的,你可能需要使用一個謂詞像這樣:

System.getProperty("os.name").startsWith("Mac OS X") 

附錄:下面的sscce用於測試場景在修訂後的問題。

附錄:由於原因不明確,啓用System Preferences > Speech > Text to Speech搶佔了control-option-space綁定。作爲替代,您可以綁定到標準Action"spacePopup",如以下修訂示例所示。

import java.awt.EventQueue; 
import java.awt.event.KeyEvent; 
import javax.swing.JComboBox; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.KeyStroke; 

/** 
* @see http://stackoverflow.com/a/13412208/230513 
*/ 
public class ComboKeyTest extends JPanel { 

    public ComboKeyTest() { 
     JComboBox cpmbo = new JComboBox(); 
     cpmbo.addItem("One"); 
     cpmbo.addItem("Two"); 
     cpmbo.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
      KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 
      KeyEvent.ALT_DOWN_MASK | KeyEvent.CTRL_DOWN_MASK), 
      "spacePopup"); 

     this.add(cpmbo); 
    } 

    private void display() { 
     JFrame f = new JFrame("NewJavaGUI"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(this); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new ComboKeyTest().display(); 
      } 
     }); 
    } 
} 
+0

感謝這對我來說絕對很好。 但還有一個問題,我需要使用此快捷鍵,當語音實用程序正在運行。 我發現使用語音轉換實用程序打開彈出窗口時遇到困難。 – varuag

+0

您可能會檢查系統偏好設置以找到衝突的鍵盤快捷鍵。 – trashgod

+0

我已經通過系統偏好設置中的一些項目對它進行了驗證,如'聽寫和語音',其中使用控制選項空間下拉列表彈出窗口,即使語音覆蓋實用程序正在運行。 – varuag

相關問題