Cell data in a table may exceed the width of its column. It is a good, user-friendly, idea to have ToolTips appear in a cell showing the entire cell data as the user brings the mouse over the cell. This can easily be done using JTable and a few lines of code. Here's how:
public class TippedTable extends JTable
{
public TippedTable()
{
this(null, null, null);
}
public TippedTable(TableModel tm)
{
this(tm, null, null);
}
public TippedTable(TableModel tm, TableColumnModel tcm)
{
this(tm, tcm, null);
}
public TippedTable(TableModel tm, TableColumnModel tcm, ListSelectionModel lsm)
{
super(tm,tcm,lsm);
}
public TippedTable(int numRows, int numColumns)
{
this(new DefaultTableModel(numRows, numColumns));
}
public TippedTable(final Vector rowData, final Vector columnNames)
{
super( rowData, columnNames );
}
public TippedTable(final Object[][] rowData, final Object[] columnNames)
{
super( rowData, columnNames );
}
public String getToolTipText(MouseEvent event)
{
int row = rowAtPoint(event.getPoint());
int col = columnAtPoint(event.getPoint());
Object o = getValueAt(row,col);
if( o == null )
return null;
if( o.toString().equals("") )
return null;
return o.toString();
}
public Point getToolTipLocation(MouseEvent event)
{
int row = rowAtPoint( event.getPoint() );
int col = columnAtPoint( event.getPoint() );
Object o = getValueAt(row,col);
if( o == null )
return null;
if( o.toString().equals("") )
return null;
Point pt = getCellRect(row, col, true).getLocation();
pt.translate(-1,-2);
return pt;
}
}
Let's use our little class, in the method that launches the frame to hold the TippedTable:
JFrame frame = new JFrame("Table Example");
Object[][] rowData = new Object[1][3];
rowData[0][0]="very long data to be tipped here";
rowData[0][1]="If that was not tip enough try this";
rowData[0][2]="This is the last row of this tip, take care and good night";
Object[] columnNames = new Object[3];
for(int i=0; i<3; i++)
{
columnNames[i]="Column "+i;
}
TippedTable tTable = new TippedTable(rowData,columnNames);
JScrollPane jsp = new JScrollPane(tTable);
frame.getContentPane().add(jsp);
frame.pack();
frame.show();
There you have it: a ToolTip on a Table Cell with data.