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.