1

JComboBox複数の値が含まれています。キーストロークを検出してMACcontrol-option-spaceのポップアップウィンドウを開くにはどうすればよいですか?JComboBox

4

1 に答える 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 に答える