Несколько событий в один клик - PullRequest
1 голос
/ 08 октября 2019

У меня есть программа, которая ищет и выдает список объектов в кадре (Frame1). Я добавил в меню создание объекта JInternalFrame, чтобы вы могли открыть один из них под ярлыком «Сохранение и сохранение объектов». Вы можете открыть более одного из этих сохраненных кадров. В списке объектов (в Frame1) есть всплывающее меню (menu1), так что вы можете выбрать опцию сохранить. Когда это будет сделано, появится другое всплывающее меню (menu2), в котором будут отображаться различные сохраненные кадры (Frame2, Frame3, ...). Для этого я добавляю цикл for каждый раз, когда вы нажимаете кнопку «Сохранить» в первом всплывающем меню (menu1), поскольку вы можете добавить сохраненные кадры (Frame4, ...) после открытия поискового кадра (Frame1). Проблема заключается в том, что каждый раз, когда событие для mouseListener происходит во втором всплывающем меню (menu2), оно накапливается. Например, первое сохранение, которое я делаю, сохраняет как следует. Второе сохранение сохраняет объект два раза. Третий сохраняет объект три раза и т. Д.

Я предполагаю, что это происходит, так как событие вызывается несколько раз. Если это проблема, есть ли способ очистить событие после вызова? В строке параметра события вы можете видеть, что при вызове несколько раз время (когда) одинаково.

private void popSaveActionPerformed(java.awt.event.ActionEvent evt) {                                        
    savesCreados = frmMenuP.getSaves(); //# of JFrames(int)
    xy=getXY();
    menuSaves = frmMenuP.getMenuSaves(); //JMenuItems
    int selectedRowIndex = tabResults.getSelectedRow();
    nombre = tabResults.getValueAt(selectedRowIndex,0).toString(); //Object to save
    for(int i=0;i<savesCreados;i++){
        JPopupMenu2.add(menuSaves.get(i));
        System.out.println(i);
        menuSaves.get(i).addActionListener(new 
java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            popSaveMenu(evt);
        }
    });
    }
    JPopupMenu2.show(tabResults,xy[0],xy[1]);
    }



private void popSaveMenu(java.awt.event.ActionEvent evt){
    listaSaves = frmMenuP.getListaSaves();  //JFrames
    System.out.println(evt.paramString()); 
    for(int i=0;i<=frmMenuP.getSaves();i++){
        if(evt.getActionCommand().contains(Integer.toString(i))){
            System.out.println("Guardar " + i);

            listaSaves.get(i-1).saveAt(nombre);
        }
    }
    }

0 1 ACTION_PERFORMED, cmd = Save1, когда = 1570501305410, модификаторы = Button1 Guardar 1

0 1 ACTION_PERFORMED, cmd = Сохранить1, когда = 1570501315585, модификаторы = Button1 Guardar 1 ACTION_PERFORMED, cmd = Save1, когда = 1570501315585, модификаторы = Button1 Guardar 1

0 1 ACTION_PERFORMED, смSave1, когда = 1570501378104, модификаторы = Button1 Guardar 1 ACTION_PERFORMED, cmd = Save1, когда = 1570501378104, модификаторы = Button1 Guardar 1 ACTION_PERFORMED, cmd = Save1, когда = 1570501378104, модификаторы = Button1 Guardar 1

...