首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MouseEvent怪异

MouseEvent怪异
EN

Stack Overflow用户
提问于 2009-07-17 20:54:54
回答 3查看 759关注 0票数 0

我正在尝试为UnitTesting创建一个带有某些修饰符的MouseEvent。我正在使用J2SE,但以下代码无法通过:

代码语言:javascript
复制
public void testMouseEventProblem() {
  MouseEvent event = new MouseEvent(new JPanel(), 1, System.currentTimeMillis(), 
    InputEvent.CTRL_DOWN_MASK | InputEvent.ALT_DOWN_MASK, 1,1, 0, false);

  assertEquals(InputEvent.CTRL_DOWN_MASK | InputEvent.ALT_DOWN_MASK, event.getModifiers());
}

它抱怨地说“预期是640,但实际上是10”

到底怎么回事?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-17 20:59:05

它在内部转换为ALT_MASK和CTRL_MASK常量(8 + 2)

它发生在JDK6的java.awt.event.InputEvent:405

代码语言:javascript
复制
/**
 * Returns the modifier mask for this event.
 */
public int getModifiers() {
    return modifiers & (JDK_1_3_MODIFIERS | HIGH_MODIFIERS);
}

试试getModifiersEx():442

代码语言:javascript
复制
public int getModifiersEx() {
    return modifiers & ~JDK_1_3_MODIFIERS;
}

因为ALT_DOWN_MASK和friends是Java1.3之后引入的扩展修饰符

证明:

代码语言:javascript
复制
public class MouseEvt {
    public static void main(String[] args) {
        MouseEvent event = new MouseEvent(new JPanel(), 1, System
                .currentTimeMillis(), InputEvent.CTRL_DOWN_MASK
                | InputEvent.ALT_DOWN_MASK, 1, 1, 0, false);

        System.out.printf("%d - %d%n", InputEvent.CTRL_DOWN_MASK 
            | InputEvent.ALT_DOWN_MASK,
            event.getModifiersEx());
    }
}

返回640 - 640

票数 3
EN

Stack Overflow用户

发布于 2009-07-17 20:57:21

我不认为你应该在这里使用assertEquals。

您正在检查一个值中是否至少设置了两个特定位中的一个,该值可以是任何值,因此您可能希望分隔断言。

让我澄清一下这一点:您得到的是一个由一堆设置的位(修饰符)组成的数字,但您只关心两个特定的位。使用assertEquals,您实际上是在说您想要两个特定的位集,而其他位集是零。

您可以做的就是断言getModifiers() &( MASK1 | MASK2 )大于零,因为这两位中至少有一位必须为on才能实现

这就是说,这些数字看起来有些古怪,你确定你使用的掩码值是正确的吗?

票数 3
EN

Stack Overflow用户

发布于 2009-07-17 21:01:39

要扩展Uri的答案,您可能想要这样说

代码语言:javascript
复制
assert(InputEvent.CTRL_DOWN_MAsK & event.getModifiers() != 0);
assert(InputEvent.ALT_DOWN_MAsK & event.getModifiers() != 0);

这将检查两个修饰符是否都被按下,而不考虑字符串的其余部分,这似乎是另一回事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1145643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档