Search code examples
javaswingtooltipjtableheader

Tooltips of JTableHeader is not showing the width of its column


I am trying to make the tooltip of my JTableHeader showing the width of column it belongs, but it's not working. The tooltip is not showing.

Here's my JTableHeader:

myTable.setModel(new DefaultTableModel(new Object[][] {{ label1, label2, label3, label4} }, 
new String[] { "foo", "bar", "foo bar", "bar foo" }));

final JTableHeader header = new TableHeaderTooltipWidth(myTable.getColumnModel());
header.setReorderingAllowed(false); 
header.setResizingAllowed(true);

TableHeaderTooltipWidth is a subclass of JTableHeader where I override the method public String getToolTipText(MouseEvent e), after reading the Official Tutorial How to use Tool tips.

package gui.paneles.elementos;

import java.awt.event.MouseEvent;

import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumnModel;

public class TableHeaderTooltipWidth extends JTableHeader {

private static final long serialVersionUID = 1L;

public TableHeaderTooltipWidth() {

}
public TableHeaderTooltipWidth(TableColumnModel model) {
    super();
}

    @Override
    public String getToolTipText(MouseEvent e) {
        int col = columnAtPoint(e.getPoint());
        return String.valueOf(this.getColumnModel().getColumn(col).getPreferredWidth());
    }
}

But the tooltips is not showing. Any help would be appreciated. Thanks!


Solution

  • ..., after reading the Official Tutorial How to use Tool tips.

    Also check out: Specifying Tool Tips for Column Headers - How to Use Tables (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    
    public class TableHeaderTooltipWidthTest {
      public JComponent makeUI() {
        TableModel model = new DefaultTableModel(
            new Object[][] {{ "label1", "label2", "label3", "label4"} }, 
            new String[] { "foo", "bar", "foo bar", "bar foo" });
        // How to Use Tables (The Java™ Tutorials)
        // Specifying Tool Tips for Column Headers
        // https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#headertooltip
        JTable table = new JTable(model) {
          //Implement table header tool tips.
          @Override protected JTableHeader createDefaultTableHeader() {
            return new JTableHeader(columnModel) {
              @Override public String getToolTipText(MouseEvent e) {
                int col = columnAtPoint(e.getPoint());
                return String.valueOf(getColumnModel().getColumn(col).getPreferredWidth());
                //int index = columnModel.getColumnIndexAtX(e.getPoint().x);
                //int realIndex = columnModel.getColumn(index).getModelIndex();
                //return String.valueOf(columnModel.getColumn(realIndex).getPreferredWidth());
              }
            };
          }
        };
        return new JScrollPane(table);
      }
      public static void main(String... args) {
        EventQueue.invokeLater(() -> {
          JFrame f = new JFrame();
          f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
          f.getContentPane().add(new TableHeaderTooltipWidthTest().makeUI());
          f.setSize(320, 240);
          f.setLocationRelativeTo(null);
          f.setVisible(true);
        });
      }
    }