create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / gui / components / CollectionTable.java
1 package net.sf.openrocket.gui.components;
2
3 import javax.swing.JTable;
4 import javax.swing.table.AbstractTableModel;
5
6
7 /*
8  * TODO: LOW:  This is currently unused.
9  */
10 public abstract class CollectionTable<T> extends JTable {
11
12         private final String[] columnNames;
13         private CollectionTableModel model;
14         
15         
16         protected CollectionTable(String[] columnNames) {
17                 this.columnNames = columnNames.clone();
18         }
19         
20         
21         protected void initializeTable() {
22                 model = new CollectionTableModel();
23                 this.setModel(model);
24         }
25         
26         
27         /**
28          * Retrieve the object for the specified row number.
29          * 
30          * @param row   the row number being queried.
31          * @return              the object at that row.
32          */
33         protected abstract T getModelObjectAt(int row);
34         
35         protected abstract int getModelRowCount();
36         
37         
38         
39         protected abstract Object getViewForModelObject(T object, int column);
40         
41         protected Class<?> getViewColumnClass(int column) {
42                 return Object.class;
43         }
44         
45         
46         
47         private class CollectionTableModel extends AbstractTableModel {
48                 @Override
49                 public int getColumnCount() {
50                         return columnNames.length;
51                 }
52                 
53                 @Override
54                 public String getColumnName(int column) {
55                         return columnNames[column];
56                 }
57
58                 @Override
59                 public Class<?> getColumnClass(int column) {
60                         return getViewColumnClass(column);
61                 }
62
63
64                 @Override
65                 public int getRowCount() {
66                         return getModelRowCount();
67                 }
68
69                 @Override
70                 public Object getValueAt(int row, int column) {
71                         T value = getModelObjectAt(row);
72                         return getViewForModelObject(value, column);
73                 }
74         }
75 }