Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Adding JButton inside a JTable

843805Apr 21 2007
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
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on May 19 2007
Added on Apr 21 2007
0 comments
223 views