Using AbstractTableModel is very straight foward, so I will just post
a source code that one can use as a basic form like DefaultTableModel
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package jtbl_ex;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.AbstractTableModel;
/**
*
* @author Lee
*/
public class TableOne extends JPanel{
private JTable table;
private JScrollPane scrollPane;
private AbstractTableModel model;
// data for the table
private Object[][] data = {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
};
// column names for the table
private String[] columnNames = {
"Name1", "Name2", "Name3", "Name4"
};
public TableOne() {
// set the Layout for the JPanel
super(new BorderLayout());
initComponents();
}
public void initComponents() {
// Initialize the Abstract Table Model
model = new MyTableModel();
// Add the model to the JTable
table = new JTable(model);
// Add the table to the JScrollPane
scrollPane = new JScrollPane(table);
// Add the scrollPane to the JPanel
this.add(scrollPane);
}
// Define the model for the table using AbstractTableModel
class MyTableModel extends AbstractTableModel{
// Decide the row count according to the data length
@Override
public int getRowCount() {
return data.length;
}
// decide the column count according to the columnNames length
@Override
public int getColumnCount() {
return columnNames.length;
}
// put the data values into the table.
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
}
// put the columnNames values into the table column names
@Override
public String getColumnName(int col){
return columnNames[col];
}
// set if the cells in the table are editable.
// In this example, all the cells are editable
@Override
public boolean isCellEditable(int row, int col) {
return true;
}
// this is for data change.
@Override
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
/*
* JTable uses this method to determine the default renderer/
* editor for each cell. If we didn't implement this method,
* then the last column would contain text ("true"/"false"),
* rather than a check box. (From oracle JTable tutorial)
*/
@Override
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
}
/**
* Create the GUI and show it.
* For thread safety,
* this method should be invoked from the
* event-dispatching thread.
* (from Oracle table tutorial)
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("TableRenderDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
TableOne newContentPane = new TableOne();
newContentPane.setOpaque(true); //content panes must be opaque
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
}
for more information about AbstractTableModel, check
http://docs.oracle.com/javase/tutorial/uiswing/components/table.html
No comments:
Post a Comment