MouseEvents с JUNG и Java - PullRequest
       29

MouseEvents с JUNG и Java

1 голос
/ 11 мая 2011

Я создал PluggableGraphMouse и 2 EditingGraphMousePluggings в моей программе Java с JUNG.Если я установил модификаторы левой кнопкой мыши и правой кнопкой мыши, то они отлично работают, вот код setModifiers:

ovalMouse.setModifiers(MouseEvent.BUTTON1_MASK);
circleMouse.setModifiers(MouseEvent.BUTTON3_MASK);

Однако мне бы хотелось, чтобы щелчок левой кнопкой мыши делал одну вещь, а SHIFT + левую.нажмите (вместо правого щелчка) сделать другое.Я перепробовал каждую комбинацию, которую только мог придумать, но не могу заставить ее работать.Вот некоторые из более логичных комбинаций, которые я пробовал, которые не работают:

//My logic here is Button1 AND Shift is down but this doesn't work
circleMouse.setModifiers(MouseEvent.BUTTON1_MASK & MouseEvent.SHIFT_DOWN_MASK);

// My logic here is Button1 AND Shift but this doesn't work either
circleMouse.setModifiers(MouseEvent.BUTTON1_MASK & MouseEvent.SHIFT_MASK);

// Also tried InputEvents but those didn't work either
circleMouse.setModifiers(InputEvent.BUTTON1_DOWN_MASK & InputEvent.SHIFT_DOWN_MASK);

Если кто-нибудь знает, что такое правильные модификаторы, я могу использовать кнопку 1 для ovalMouse и кнопку 1 + shift для circleMouseпожалуйста, дай мне знать.Спасибо.

1 Ответ

1 голос
/ 11 мая 2011

Чтобы отфильтровать Shift + Button3 в любом событии мыши xxxGraphMousePlugin JUNG2, которое реализует MouseListener:

    System.out.println(circleMouse.getModifiers());
    if (( circleMouse.getModifiers() & (MouseEvent.SHIFT_MASK | MouseEvent.BUTTON3_MASK)) == (MouseEvent.SHIFT_MASK | MouseEvent.BUTTON3_MASK)){
        System.out.println(MouseEvent.getMouseModifiersText(circleMouse.getModifiers()));
    }

Обновление

Итак, если вы хотите различить событие мыши между BUTTON3 и SHIFT+BUTTON3, следующий тест покажет вам:

graphMouse.add(new MyPopupGraphMousePlugin());

protected class MyPopupGraphMousePlugin extends AbstractPopupGraphMousePlugin
implements MouseListener {

    @Override
    protected void handlePopup(MouseEvent e) {
        boolean filtered1 = false;
        boolean filtered2 = false;

        System.out.println(e.getModifiers());
        if (( e.getModifiers() & (MouseEvent.SHIFT_MASK | MouseEvent.BUTTON3_MASK)) == (MouseEvent.SHIFT_MASK | MouseEvent.BUTTON3_MASK)){
            filtered1 = true;
        }
        if (( e.getModifiers() & (MouseEvent.BUTTON3_MASK)) == (MouseEvent.BUTTON3_MASK)){
            filtered2 = true;
        }

        if(filtered2 == true) {
            System.out.println("BUTTON3");
        }
        if(filtered1 == true) {
            System.out.println("SHIFT+BUTTON3");
            //or do something more useful like pop up a JPopupMenu
        }       
    }
}

В приведенном выше тесте под JUNG2:

  1. С помощью клавиши SHIFT : нажатие SHIFT+BUTTON3 (клавиша SHIFT + нажатие правой кнопки мыши) покажет сообщения «BUTTON3» и «SHIFT + BUTTON3»

  2. Кроме клавиши SHIFT : нажатие any key + BUTTON3 (любая клавиша + нажатие правой кнопки мыши) покажет только сообщение «BUTTON3»

...