MouseListener сработал без проверки JCheckBox - PullRequest
1 голос
/ 17 июня 2010

Это довольно сумасшедший:

У меня есть запись AppSight (для тех, кто не знаком, это запись того, что они сделали, включая ввод с клавиатуры / мыши + сетевой трафик и т. Д.) Клиента, воспроизводящего ошибку. По сути, у нас есть ряд элементов, перечисленных на экране, с JCheckBox-е внизу слева. У нас есть набор MouseListener для JPanel, который выглядит примерно так:

private MouseAdapter createMouseListener() {
    return new MouseAdapter(){
        public void mousePressed( MouseEvent e ) {

            if( e.getComponent() instanceof JCheckBox ) {
                // Do stuff
            }
        }
    };
}

Судя по записи, очень сильно видно, что они нажимают чуть выше одного из флажков. После этого я верю, что этот слушатель сработал, и случился блок «Делай вещи». Однако, это НЕ проверяло коробку. Затем пользователь увидел, что флажок снят, и щелкнул по нему. Это вызвало повторное срабатывание блока «Делать вещи», что отменило то, что он делал в первый раз. На этот раз флажок был отмечен. Таким образом, пользователь считает, что флажок установлен, и выглядит так, как есть, но наш клиент считает, что флажок снят, так как он был нажат дважды.

Возможно ли это вообще? На самом деле я не могу воспроизвести это или увидеть, как это возможно, но на основании записи и данных, которые клиент отправил на сервер, я не вижу другого логического объяснения.

Любая помощь, мысли и / или идеи будут высоко оценены.

Ответы [ 2 ]

2 голосов
/ 17 июня 2010

Возможно, пользователь нажал на флажок, но перед тем, как отпустить кнопку мыши, он убрал мышь от компонента. Я почти уверен, что в этом случае чекбокс не будет проверен, хотя и не уверен в поведении потока событий в этом сценарии.

1 голос
/ 17 июня 2010

Я не думаю, что вы можете предположить, что, поскольку мышь была нажата на флажке, она также будет выпущена на флажке.Может быть, просто сделать что-то вроде этого:

private MouseAdapter createMouseListener() { 
    return new MouseAdapter(){ 
        public void mouseReleased( MouseEvent e ) { 

            if( e.getComponent() instanceof JCheckBox ) { 
                // And just to be sure....
                JCheckBox jcb = (JCheckBox) e.getComponent();
                if(jcb.isSelected())
                {
                    // Do stuff  
                }
            } 
        } 
    }; 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...