【问题标题】:Add shortcut for JMenuItem in loop在循环中添加 JMenuItem 的快捷方式
【发布时间】:2016-01-06 16:55:17
【问题描述】:

我创建了包含特定类别和项目的 JMenu。我想为每个项目添加 for() 快捷方式取决于项目数,但我不知道如何。

在 lopp 我用这个:

item.setAccelerator(KeyStroke.getKeyStroke(
                    java.awt.event.KeyEvent.VK_x, 
                    java.awt.Event.CTRL_MASK));

在“x”中,我想使用 0-9 之间的数字,如果我有超过 10 个的项目,则将 VK_x 更改为 VK_NUMPADx。

有什么简单的方法吗?

【问题讨论】:

    标签: java keystroke jmenu


    【解决方案1】:

    你可以这样做:

    int[] events = { KeyEvent.VK_0, KeyEvent.VK_1 ... KeyEvent.VK_9, KeyEvent.VK_NUMPAD0 ... KeyEvent.VK_NUMPAD9 };
    JMenuItem[] items = {item1,item2 ... item20};
    for(int i = 0;i < events.length && i < items.length;i++){
        items[i].setAccelerator(KeyStroke.getKeyStroke(
                    events[i], 
                    Event.CTRL_MASK));
    }
    

    在此示例中,item1 将与 KeyEvent.VK_0 关联,item2KeyEvent.VK_1 关联等等。

    【讨论】:

    • 感谢您的帮助 :) 它有效,就我而言,我更喜欢您的方式。
    • @ullQuiorra 我很高兴能帮上忙。祝你好运。
    【解决方案2】:

    KeyEvent.VK_0 到 KeyEvent.VK_9 表示为十进制数字 48 - 57,KeyEvent.VK_NUMPAD0 到 KeyEvent.VK_NUMPAD9 表示为 106 - 115。

        int keyCode;
        for (int i = 0; i < menu.getItemCount(); i++) {
            JMenuItem menuItem = menu.getItem(i);
            if (i < 10) {
                keyCode = 48 + i;
            } else {
                keyCode = 106 + i % 10;
            }
            menuItem.setAccelerator(KeyStroke.getKeyStroke(
                    keyCode,
                    java.awt.Event.CTRL_MASK));
        }
    

    你也可以有这个想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 2019-06-13
      • 1970-01-01
      • 2016-10-24
      相关资源
      最近更新 更多