package com.kostbot.zoodirector.ui.helpers; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.swing.*; import javax.swing.table.*; import java.util.Collections; import java.util.Set; import java.util.TreeSet; public class DynamicTable { private static final Logger logger = LoggerFactory.getLogger(DynamicTable.class); public interface Callback { void execute(int row); } /** * Delete the selected rows from the table model raking into account the sort order. * * @param table */ public static void removeSelectedRows(JTable table) { removeSelectedRows(table, null); } /** * Delete the selected rows from the table model raking into account the sort order. Executes the callback prior to * each delete. * * @param table * @param callback executed prior to each row deletion. */ public static void removeSelectedRows(JTable table, Callback callback) { int[] rows = table.getSelectedRows(); // Return early to avoid unnecessary object creation. if (rows.length == 0) { return; } Set<Integer> realRows = new TreeSet<Integer>(Collections.reverseOrder()); for (int i = 0; i < rows.length; i++) { realRows.add(table.convertRowIndexToModel(rows[i])); } DefaultTableModel tableModel = (DefaultTableModel) table.getModel(); for (int row : realRows) { if (callback != null) { callback.execute(row); } logger.debug("delete row {} : {}", row, tableModel.getValueAt(row, 0)); tableModel.removeRow(row); } } }