import java.awt.Component;
import java.util.EventObject;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.CellEditorListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
public class MainWindow extends JFrame {
public MainWindow()
{
super();
this.setSize(300, 300);
TableModel dataModel = new AbstractTableModel()
{
public int getColumnCount() { return 3; }
public int getRowCount() { return 4;}
public Object getValueAt(int row, int col)
{
if(col==2) {
JTable tab = new JTable(3,1);
tab.setModel(new AbstractTableModel()
{
public int getColumnCount() { return 1; }
public int getRowCount() { return 3;}
public Object getValueAt(int row, int col)
{
return new Integer(row*col);
}
// cell which contains a JTable must be editable
// as well as isCellEditable in the assigned cell editor
public boolean isCellEditable(int rowIndex,int colIndex)
{
return true;
}
});
return tab;
}
return new Integer(row*col);
}
// cell which contains a JTable must be editable
// as well as isCellEditable in the assigned cell editor
public boolean isCellEditable(int rowIndex,int colIndex)
{
if(colIndex==2) return true;
return false;
}
// returns for the column which contains a JTable the
// JTable class, so that the view
// can assign a appropriate renderer
public Class<?> getColumnClass(int columnIndex) {
if(columnIndex == 2) return JTable.class;
return super.getColumnClass(columnIndex);
}
};
JTable table = new JTable(dataModel);
JScrollPane scrollpane = new JScrollPane(table);
TableColumn tc = table.getColumnModel().getColumn(2);
tc.setCellRenderer(new TableCellRenderer()
{
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
// TODO Auto-generated method stub
JTable tab = (JTable) value;
table.setRowHeight(row, 100);
return tab;
}
});
tc.setCellEditor(new TableCellEditor()
{
@Override
public boolean isCellEditable(EventObject arg0) {
// TODO Auto-generated method stub
return true;
}
@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
return (JTable) value;
}
@Override
public void addCellEditorListener(CellEditorListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void cancelCellEditing() {
// TODO Auto-generated method stub
}
@Override
public Object getCellEditorValue() {
// TODO Auto-generated method stub
return new JTable(3,1);
}
@Override
public void removeCellEditorListener(CellEditorListener arg0) {
// TODO Auto-generated method stub
}
@Override
public boolean shouldSelectCell(EventObject arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean stopCellEditing() {
// TODO Auto-generated method stub
return false;
}
}
);
this.getContentPane().add(scrollpane);
}
}