概要

JTableTooltipsが、カーソルのある行の内容などを表示するようにします。

サンプルコード

JTable table = new JTable(model) {
  @Override public String getToolTipText(MouseEvent e) {
    int row = convertRowIndexToModel(rowAtPoint(e.getPoint()));
    TableModel m = getModel();
    return "<html>" + m.getValueAt(row, 1) + "<br>"
                    + m.getValueAt(row, 2) + "</html>";
  }
};
view all

解説

JTablegetToolTipTextメソッドをオーバーライドして、カーソルがある行の情報を表示しています。

  • JTable#convertRowIndexToModelメソッドを使ってviewRowIndexmodelRowIndexに変更し、モデルから行情報を取得
  • 1列、第2列をhtmlタグを使ってそれぞれToolTipTextとして設定

以下のように、setToolTipText(...)メソッドを使用して、各行にToolTipTextを設定する方法もあります。

  • JTable#prepareRendererメソッド内でsetToolTipText(...)を使用する
    JTable table = new JTable() {
      @Override public Component prepareRenderer(
          TableCellRenderer tcr, int row, int column) {
        Component c = super.prepareRenderer(tcr, row, column);
        if (c instanceof JComponent) {
          int mr = convertRowIndexToModel(row);
          int mc = convertColumnIndexToModel(column);
          Object o = getModel().getValueAt(mr, mc);
          String s = (o != null) ? o.toString() : null;
          ((JComponent) c).setToolTipText(s.isEmpty() ? null : s);
        }
        return c;
      }
    };
    
  • TableCellRenderer#getTableCellRendererComponent(...)メソッド内でsetToolTipText(...)を使用する
    table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
      @Override public Component getTableCellRendererComponent(
          JTable table, Object value, boolean isSelected,
          boolean hasFocus, int row, int column) {
        super.getTableCellRendererComponent(
          table, value, isSelected, hasFocus, row, column);
        //...
        this.setToolTipText(...);
        return this;
      }
    });
    

参考リンク

コメント

  • 名前もコメントも空の場合は、空のツールチップが表示されないように、nullを返すようにした方がいいかも。 -- aterai