JComboBox
複数の値が含まれています。キーストロークを検出してMACcontrol-option-space
のポップアップウィンドウを開くにはどうすればよいですか?JComboBox
質問する
819 次
1 に答える
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();
}
});
}
}
于 2012-11-16T07:30:04.340 に答える