public void undo() { // We must add our element... if (jrf == null && crosstabReportElement == null) return; Vector changed_elements = new Vector(); for (int i = this.getElements().size() - 1; i >= 0; --i) { PositionedElement pe = (PositionedElement) getElements().get(i); ReportElement element = pe.getElement(); // Add element.... if (crosstabReportElement != null) { crosstabReportElement.getElements().insertElementAt(element, pe.getOldPosition()); } else { jrf.getReport().getElements().insertElementAt(element, pe.getOldPosition()); // jrf.addSelectedElement( element, false ); if (element instanceof CrosstabReportElement) { jrf.addCrosstabEditor((CrosstabReportElement) element); } } changed_elements.add(element); // jrf.getSelectedElements().remove( element ); // jrf.fireReportListenerReportElementsChanged(new ReportElementChangedEvent(jrf, element , // ReportElementChangedEvent.REMOVED)); } jrf.fireReportListenerReportElementsChanged( new ReportElementChangedEvent( jrf, crosstabReportElement, changed_elements, ReportElementChangedEvent.ADDED)); if (crosstabReportElement != null) { jrf.getCrosstabEditor(crosstabReportElement) .getPanelEditor() .setSelectedElements(changed_elements); jrf.getCrosstabEditor(crosstabReportElement).getPanelEditor().repaint(); } else { jrf.setSelectedElements(changed_elements); jrf.getReportPanel().repaint(); } }