Swing - JTable...auto creation of DefaultTableModel when no model supplied?
Hello, trying to understand JTable and use two entries as reference for studies:
1) http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
2) http://java.sun.com/developer/Books/swing2/chapter18-01.html
Problem description short: Try to test method createDefaultDataModel(), by overriding this method and see if it is invoked when no model supplied to the JTable constructor. Although DefaultTableModel is created ...this does not seem to be done by createDefaultDataModel().
Problem description additional:
I extend JTable and override createDefaultDataModel(), adding the super.createDefaultDataModel() command to make sure all things work, while adding just a signalling print message to it. Although DefaultTableModel is created (checked via System.out.println("tabel model = "+ this.getModel().getClass().getName()) in constructor) ...this does not seem to be done by overriden createDefaultDataModel() which should print another message when visited:
publicvoid createDefaultDataModel(){
super.createDefaultDataModel();
System.out.println("Default data model method visited");
returnnew DefaultTableModel();
I assume if I use an extended JTable constructor that is not supplied a model a "default implementation will be created with the method createDefaultModel() "
I do see that a DefaultTableModel is created, by testing this in the constructor, but it doesn't seem that the extended createDefaultDataModel() is visited for it.
Thanks
CODE of extended JTable class
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.ListSelectionModel;
import javax.swing.event.TableColumnModelEvent;
import javax.swing.table.*;
publicclass TestListener_JTable2extends JTable{
public TestListener_JTable2(int numRows,
int numColumns){
super(numRows,numColumns);
System.out.println("tabel model = "+ this.getModel().getClass().getName());
}
protected TableModel createDefaultDataModel(){
super.createDefaultDataModel();
System.out.println("auto createDefaultDataModel() method visited ");
returnnew DefaultTableModel();
}
}
Main example CODE derived from swing tutorial:
/*
* SimpleTableDemo.java requires no other files.
*/
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
publicclass SimpleTableDemo2extends JPanel{
privateboolean DEBUG =false;
public SimpleTableDemo2(){
super(new GridLayout(1,0));
final TestListener_JTable2 table =new TestListener_JTable2(10,10);//(data, columnNames);
table.setPreferredScrollableViewportSize(new Dimension(500, 120));
if (DEBUG){
table.addMouseListener(new MouseAdapter(){
publicvoid mouseClicked(MouseEvent e){
printDebugData(table);
}
});
}
//Create the scroll pane and add the table to it.
JScrollPane scrollPane =new JScrollPane(table);
//Add the scroll pane to this panel.
add(scrollPane);
}
privatevoid printDebugData(JTable table){
int numRows = table.getRowCount();
int numCols = table.getColumnCount();
javax.swing.table.TableModel model = table.getModel();
System.out.println("Value of data: ");
for (int i=0; i < numRows; i++){
System.out.print("row " + i +":");
for (int j=0; j < numCols; j++){
System.out.print(" " + model.getValueAt(i, j));
}
System.out.println();
}
System.out.println("--");
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
privatestaticvoid createAndShowGUI(){
//Create and set up the window.
JFrame frame =new JFrame("SimpleTableDemo2");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
SimpleTableDemo2 newContentPane =new SimpleTableDemo2();
newContentPane.setOpaque(true);//content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
publicstaticvoid main(String[] args){
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable(){
publicvoid run(){
createAndShowGUI();
}
});
}
}
Message was edited by:
pieter.de.boer61@gmail.com

