001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.gui.util; 003 004 import java.util.ArrayList; 005 import java.util.LinkedList; 006 import java.util.List; 007 008 import javax.swing.event.CellEditorListener; 009 import javax.swing.event.ChangeEvent; 010 011 public class TableCellEditorSupport { 012 private Object editor; 013 private LinkedList<CellEditorListener> listeners; 014 015 public TableCellEditorSupport(Object editor) { 016 this.editor = editor; 017 listeners = new LinkedList<CellEditorListener>(); 018 } 019 020 protected List<CellEditorListener> getListeners() { 021 synchronized (this) { 022 return new ArrayList<CellEditorListener>(listeners); 023 } 024 } 025 026 public void addCellEditorListener(CellEditorListener l) { 027 synchronized (this) { 028 if (l != null && ! listeners.contains(l)) { 029 listeners.add(l); 030 } 031 } 032 } 033 public void removeCellEditorListener(CellEditorListener l) { 034 synchronized (this) { 035 if (l != null &&listeners.contains(l)) { 036 listeners.remove(l); 037 } 038 } 039 } 040 041 public void fireEditingCanceled() { 042 for (CellEditorListener listener: getListeners()) { 043 listener.editingCanceled(new ChangeEvent(editor)); 044 } 045 } 046 047 public void fireEditingStopped() { 048 for (CellEditorListener listener: getListeners()) { 049 listener.editingStopped(new ChangeEvent(editor)); 050 } 051 } 052 }