У меня есть программа, которая ищет и выдает список объектов в кадре (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