### Question:
EventTableColumnModel implements TableColumnModel, PropertyChangeListener, ListSelectionListener, ListEventListener<T> { @Override public TableColumn getColumn(int columnIndex) { swingThreadSource.getReadWriteLock().readLock().lock(); try { return swingThreadSource.get(columnIndex); } finally { swingThreadSource.getReadWriteLock().readLock().unlock(); } } EventTableColumnModel(EventList<T> source); @Override void addColumn(TableColumn column); @Override void removeColumn(TableColumn column); @Override void moveColumn(int columnIndex, int newIndex); @Override void setColumnMargin(int newMargin); @Override int getColumnMargin(); @Override int getColumnCount(); @Override Enumeration<TableColumn> getColumns(); @Override int getColumnIndex(Object identifier); @Override TableColumn getColumn(int columnIndex); @Override int getColumnIndexAtX(int x); @Override int getTotalColumnWidth(); @Override void setColumnSelectionAllowed(boolean flag); @Override boolean getColumnSelectionAllowed(); @Override int[] getSelectedColumns(); @Override int getSelectedColumnCount(); @Override void setSelectionModel(ListSelectionModel newModel); @Override ListSelectionModel getSelectionModel(); @Override void addColumnModelListener(TableColumnModelListener listener); @Override void removeColumnModelListener(TableColumnModelListener listener); @Override void propertyChange(PropertyChangeEvent evt); @Override void valueChanged(ListSelectionEvent e); @Override void listChanged(ListEvent<T> listChanges); void dispose();  }### Answer:
@Test public void testGetColumn() { final TableColumn nameColumn = createColumn("name"); final TableColumn ageColumn = createColumn("age"); EventList<TableColumn> columns = GlazedLists.eventListOf(nameColumn, ageColumn); DefaultTableColumnModel defaultModel = watcher.createDefaultModel(columns); EventTableColumnModel eventModel = watcher.createEventModel(columns); assertEquals(nameColumn, defaultModel.getColumn(0)); assertEquals(nameColumn, eventModel.getColumn(0)); assertEquals(ageColumn, defaultModel.getColumn(1)); assertEquals(ageColumn, eventModel.getColumn(1)); try { defaultModel.getColumn(2); fail("failed to throw IndexOutOfBoundsException"); } catch (IndexOutOfBoundsException e) { } try { eventModel.getColumn(2); fail("failed to throw IndexOutOfBoundsException"); } catch (IndexOutOfBoundsException e) { } }