如何在java中单击按钮时检测修改键组合

时间:2015-04-10 20:53:50

标签: java swing click modifier

我在Java Swing应用程序中有一个按钮,用于缩放到选区。我实现了3种点击方式:

  • 点击:使用逐步动画缩放到选区
  • 选项 - 单击:对选择执行单个缩放步骤
  • 命令 - 单击:突然缩放至完全选择

我想实现反向行为(即将选择向外扩展到完全缩小),此外,还保持shift键,所以它会是这样的:

  • shift-click:使用逐步动画完全缩小
  • shift-option-click:与选择
  • 进行单一缩放步骤
  • shift-command-click:突然缩放至完全缩小

除了shift-option-click和shift-command-click之外,我知道怎么做。例如。以下是我如何进行单步放大:

int stepMask = InputEvent.ALT_MASK;
if((e.getModifiers() & InputEvent.ALT_MASK) == stepMask) {
    //do the single-step zoom
}

但我无法弄清楚如何通过点击进行按键组合。我尝试过的所有内容只能使用一个修饰键。如何在按钮单击时检测到键组合?

2 个答案:

答案 0 :(得分:0)

修饰符值是按位或值,包含与事件相关的所有InputEvent修饰符。要识别特定修饰符,请检查给定逻辑所需的所有内容:

if((e.getModifiers() & InputEvent.ALT_MASK) != 0 && (e.getModifiers() & InputEvent.SHIFT_MASK) != 0 ) {
    //code for event
}

答案 1 :(得分:-1)

这是一种更优雅的方法。首先,将组合蒙版定义为常量:

    OWLOntologyDocumentSource source = new FileDocumentSource(new File("ontology.owl"));
    OWLOntology o = OWLManager.createOWLOntologyManager().loadOntologyFromOntologyDocument(source);

然后,在按钮的ActionListener中,执行以下操作:

private static final int SHIFT_OPTION_MASK = InputEvent.ALT_MASK | InputEvent.SHIFT_MASK;

如果你有很多这些,你可以更进一步。首先定义一个枚举:

if((e.getModifiers() & SHIFT_OPTION_MASK) == SHIFT_OPTION_MASK) {
    // code for event
}

然后,在你的actionListener中,你可以改为:

import java.awt.event.InputEvent;

public enum ModifierKey {
    ALT(InputEvent.ALT_MASK),
    SHIFT(InputEvent.SHIFT_MASK),
    CONTROL(InputEvent.CTRL_MASK),
    COMMAND(InputEvent.META_MASK);
    // add more enum values here as needed

    public static boolean checkFor(ActionEvent e, ModifierKey... expectedModifiers) {
        int expectedModifierMask = 0;
        for (ModifierKey expectedModifier : expectedModifiers) {
            expectedModifierMask |= expectedModifier.getMask();
        }
        return (e.getModifiers() & expectedModifierMask) == expectedModifierMask;
    }

    private final int mask;

    ModifierKey(int mask) {
        this.mask = mask;
    }

    public int getMask() {
        return mask;
    }
}