88
99public class ChannelTableModel extends AbstractTableModel {
1010
11+ // column constants
12+ private static final int COLUMN_USE = 0 ;
13+ private static final int COLUMN_PRESET = 1 ;
14+ private static final int COLUMN_OFFSET = 2 ;
15+
1116 /**Column names for the channels table. */
1217 private final String [] columnNames_ = {
1318 "Use" ,
@@ -27,13 +32,23 @@ public int getRowCount() {
2732 }
2833
2934 @ Override
30- public Class <?> getColumnClass ( int c ) {
31- return getValueAt ( 0 , c ). getClass () ;
35+ public int getColumnCount ( ) {
36+ return columnNames_ . length ;
3237 }
3338
3439 @ Override
35- public int getColumnCount () {
36- return columnNames_ .length ;
40+ public Class <?> getColumnClass (int c ) {
41+ switch (c ) {
42+ case COLUMN_USE :
43+ return Boolean .class ;
44+ case COLUMN_PRESET :
45+ return String .class ;
46+ case COLUMN_OFFSET :
47+ return Double .class ;
48+ default :
49+ // Note: This will never happen if getColumnCount is correct.
50+ throw new IllegalArgumentException ("Invalid column index: " + c );
51+ }
3752 }
3853
3954 @ Override
@@ -48,13 +63,13 @@ public boolean isCellEditable(int row, int col) {
4863
4964 @ Override
5065 public Object getValueAt (int row , int col ) {
51- ChannelSpec channelSpec = tableData_ .getChannelByIndex (row );
66+ final ChannelSpec channelSpec = tableData_ .getChannelByIndex (row );
5267 switch (col ) {
53- case 0 :
68+ case COLUMN_USE :
5469 return channelSpec .isUsed ();
55- case 1 :
70+ case COLUMN_PRESET :
5671 return channelSpec .getName ();
57- case 2 :
72+ case COLUMN_OFFSET :
5873 return channelSpec .getOffset ();
5974 default :
6075 throw new IllegalArgumentException ("Invalid column index: " + col );
@@ -63,26 +78,34 @@ public Object getValueAt(int row, int col) {
6378
6479 @ Override
6580 public void setValueAt (Object value , int row , int col ) {
66- ChannelSpec channelSpec = tableData_ .getChannelByIndex (row );
81+ final ChannelSpec channelSpec = tableData_ .getChannelByIndex (row );
6782 switch (col ) {
68- case 0 :
83+ case COLUMN_USE :
6984 if (value instanceof Boolean ) {
7085 channelSpec .setUsed ((boolean ) value );
86+ } else {
87+ return ; // early exit => wrong type
7188 }
7289 break ;
73- case 1 :
90+ case COLUMN_PRESET :
7491 if (value instanceof String ) {
7592 channelSpec .setName ((String ) value );
93+ } else {
94+ return ; // early exit => wrong type
7695 }
7796 break ;
78- case 2 :
97+ case COLUMN_OFFSET :
7998 if (value instanceof Double ) {
8099 channelSpec .setOffset ((double ) value );
100+ } else {
101+ return ; // early exit => wrong type
81102 }
82103 break ;
83104 default :
84105 throw new IllegalArgumentException ("Invalid column index: " + col );
85106 }
107+
108+ // update the table ui
86109 fireTableCellUpdated (row , col );
87110 }
88111
0 commit comments