package com.revolsys.swing.table.object;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import javax.swing.event.TableModelEvent;
import org.jdesktop.swingx.table.TableColumnExt;
import com.revolsys.swing.table.BaseJTable;
public class ObjectListTable<T> extends BaseJTable implements Iterable<T> {
private static final long serialVersionUID = 1L;
public ObjectListTable(final List<String> columnNames, final List<String> columnTitles) {
this(new ObjectListTableModel<T>(columnNames, columnTitles));
}
public ObjectListTable(final List<T> objects, final List<String> columnNames,
final List<String> titles) {
this(new ObjectListTableModel<>(objects, columnNames, titles));
}
public ObjectListTable(final List<T> objects, final List<String> columnNames,
final List<String> columnTitles, final List<Class<?>> columnClasses) {
this(new ObjectListTableModel<>(objects, columnNames, columnTitles, columnClasses));
}
public ObjectListTable(final ObjectListTableModel<T> model) {
super(model);
for (int i = 0; i < model.getColumnCount(); i++) {
final TableColumnExt column = getColumnExt(i);
column.sizeWidthToFit();
}
}
public ObjectListTable(final String... columnNames) {
this(new ObjectListTableModel<T>(columnNames));
}
@SuppressWarnings("unchecked")
public ObjectListTableModel<T> getObjectListTableModel() {
return (ObjectListTableModel<T>)super.getModel();
}
public List<T> getObjects() {
return getObjectListTableModel().getObjects();
}
@SuppressWarnings("unchecked")
public <V> V getSelectedObject() {
final int selectedRow = getSelectedRowInModel();
if (selectedRow > -1) {
final ObjectListTableModel<T> model = getObjectListTableModel();
return (V)model.getObject(selectedRow);
} else {
return null;
}
}
@Override
@SuppressWarnings("unchecked")
public ObjectListTableModel<T> getTableModel() {
return (ObjectListTableModel<T>)getModel();
}
@Override
public Iterator<T> iterator() {
return getObjects().iterator();
}
@Override
public void removeNotify() {
getTableModel().dispose();
super.removeNotify();
}
public void setObjects(final Collection<? extends T> objects) {
getObjectListTableModel().setObjects(objects);
}
@Override
public void tableChanged(final TableModelEvent e) {
try {
super.tableChanged(e);
if (this.tableHeader != null) {
this.tableHeader.resizeAndRepaint();
}
} catch (final Throwable t) {
}
}
}