• Post Reply Bookmark Topic Watch Topic
  • New Topic

How to change from AbstractTableModel to DefaultTableModel

 
Dinesh Ramaswamy
Greenhorn
Posts: 13
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I have pasted the code below which makes use of Abstract table model.This code is an example of a table that has first 2 columns fixed and scrollable from the 3rd column.
Can anyone pls tell me now how should I do the same with DefaultTableModel with respect to the code given.
Regards,
Dinesh.
**************************************************
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;

public class FixedColumnExample extends JFrame {

Object[][] data;
Object[] column;
JTable fixedTable,table;

public FixedColumnExample() {

super( "Fixed Column Example" );

setSize( 400, 150 );

data = new Object[][]{
{"1","11","A","","","","",""},
{"2","22","","B","","","",""},
{"3","33","","","C","","",""},
{"4","44","","","","D","",""},
{"5","55","","","","","E",""},
{"6","66","","","","","","F"}};
column = new Object[]{"fixed 1","fixed 2","a","b","c","d","e","f"};

AbstractTableModel fixedModel = new AbstractTableModel() {
// We have two fixed rows so report 2 columns from data
public int getColumnCount() { return 2; }
public int getRowCount() { return data.length; }
public String getColumnName(int col) { return (String)column[col]; }
// As only the first two columns are reported this can stay
// the same
public Object getValueAt(int row, int col) { return data[row][col]; }
};

AbstractTableModel model = new AbstractTableModel() {
// This model has two less columns in the data as two are
// fixed
public int getColumnCount() { return column.length -2; }
public int getRowCount() { return data.length; }
public String getColumnName(int col) {
// The columns start 2 on in the data
return (String)column[col +2];
}
public Object getValueAt(int row, int col) {
// The first two column are for the fixed table so return
// data after by adding 2
return data[row][col+2];
}
public void setValueAt(Object obj, int row, int col) {
// As above
data[row][col +2] = obj;
}
public boolean isCellEditable(int row, int col) { return true; }
};

fixedTable = new JTable( fixedModel ) ;
ListSelectionModel lsm = fixedTable.getSelectionModel();
fixedTable.getTableHeader().setResizingAllowed(false);
lsm.addListSelectionListener(new SelectionListener(true));

table = new JTable( model ) ;
lsm = table.getSelectionModel();
lsm.addListSelectionListener(new SelectionListener(false));
fixedTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
fixedTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

JScrollPane scroll = new JScrollPane( table );
JViewport viewport = new JViewport();
viewport.setView(fixedTable);
viewport.setPreferredSize(fixedTable.getPreferredSize());
scroll.setRowHeaderView(viewport);
scroll.setCorner(JScrollPane.UPPER_LEFT_CORNER,fixedTable.getTableHeader());

getContentPane().add(scroll, BorderLayout.CENTER);
}

class SelectionListener implements ListSelectionListener {

boolean isFixedTable = true;

public SelectionListener(boolean isFixedTable) { this.isFixedTable = isFixedTable; }

public void valueChanged(ListSelectionEvent e) {

if (isFixedTable) {
int fixedSelectedIndex = fixedTable.getSelectedRow();
table.setRowSelectionInterval(fixedSelectedIndex,fixedSelectedIndex);
}
else {
int selectedIndex = table.getSelectedRow();
fixedTable.setRowSelectionInterval(selectedIndex,selectedIndex);
}
}
}

public static void main(String[] args) {
FixedColumnExample frame = new FixedColumnExample();
frame.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e ) {
System.exit(0);
}
});
frame.setVisible(true);
}
}
**************************************************
 
Avi Abrami
Ranch Hand
Posts: 1141
1
Java Oracle
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi Dinesh,
In the code you have posted, you are creating an 'anonymous' subclass of "javax.swing.table.AbstractTableModel" which starts with this line (of your code):

The java compiler will create a "FixedColumnExample$1.class" file containing the definition of your anonymous class that extends "AbstractTableModel".
An alternative is to create a named class that extends "AbstractTableModel":

In other words, replace the anonymous definition with a named definition.
Now exactly the same way as you create a class that extends "AbstractTableModel", you can create a class that extends "DefaultTableModel":

As detailed in the javadoc for "DefaultTableModel":
http://java.sun.com/j2se/1.4.1/docs/api/javax/swing/table/DefaultTableModel.html
it uses a "Vector" of "Vector"s to contain the data. Therefore, to extract the entire first row of the "JTable", use:

and to get the data in the third column of your "JTable", use:

Hope this has helped you.
Good luck,
Avi.
 
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!