我在Java Swing应用程序中有一个按钮,用于缩放到选区。我实现了3种点击方式:
我想实现反向行为(即将从选择向外扩展到完全缩小),此外,还保持shift键,所以它会是这样的:
除了shift-option-click和shift-command-click之外,我知道怎么做。例如。以下是我如何进行单步放大:
int stepMask = InputEvent.ALT_MASK;
if((e.getModifiers() & InputEvent.ALT_MASK) == stepMask) {
//do the single-step zoom
}
但我无法弄清楚如何通过点击进行按键组合。我尝试过的所有内容只能使用一个修饰键。如何在按钮单击时检测到键组合?
答案 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;
}
}