Adding JButton inside a JTable
Hi ,
I have a JTable that has JButton in some columns. I would like to know how to make JButton ( or any component ) act like JButton inside a JTable cell.
I am using DefaultTableModel for my JTable :
---------------------------------------------------
// Table model
public class MyDefaultTableModel extends DefaultTableModel{
private static final int ROW = 0 ;
// Create a defaultTableModel
public MyDefaultTableModel( Vector columnNames ){
super( columnNames, ROW );
}
// Returns the data type of the specifed coloum
public Class getColumnClass( int columnIndex ){
return getValueAt( ROW, columnIndex ).getClass();
}
public boolean isCellEditable( int row, int col ){
return false;
}
}
When I add data like
Vector data = new Vector();
data.add("hello");data.add("hello");data.add("hello");data.add("hello");data.add("hello");
data.add( new JButton("hello")) ;data.add( new JButton("Hello"));
editScheduleTablePanel.addRowToTable( data );
It is adding and rendering my JTable fine but my button does not behave as a JButton.
Here is my button renderer class:
----------------------------------------
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class EditScheduleTableButtonRenderer extends JButton implements TableCellRenderer {
private TableCellRenderer defaultRenderer;
public EditScheduleTableButtonRenderer( TableCellRenderer renderer ){
defaultRenderer = renderer;
}
// using this renderer needs to be rendered.
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
// If table cell contains a component , return the component.
if ( value instanceof JButton ){
return (JButton)value;
}
return defaultRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, rowIndex, vColIndex );
}
}
I followed what is described here : http://www.devx.com/getHelpOn/10MinuteSolution/20425
Only modification I made is that I used DefaultTableModel than using AbstractTableModel- used by the above article.
Thank you
Ramesh