• title: JTableのTooltipsを行ごとに変更 tags: [JTable, JToolTip, TableCellRenderer] author: aterai pubdate: 2005-03-28T02:50:10+09:00 description: JTableのTooltipsが、カーソルのある行の内容などを表示するようにします。

概要

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 in GitHub: Java, Kotlin

解説

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

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

以下のように、JTable#prepareRendererメソッドや、CellRendererなどで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;
  }
};
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;
  }
});

参考リンク

コメント