Swing/RowTooltips の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/RowTooltips へ行く。
- Swing/RowTooltips の差分を削除
--- category: swing folder: RowTooltips title: JTableのTooltipsを行ごとに変更 tags: [JTable, JToolTip, TableCellRenderer] author: aterai pubdate: 2005-03-28T02:50:10+09:00 description: JTableのTooltipsが、カーソルのある行の内容などを表示するように設定します。 image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTSbfFU7HI/AAAAAAAAAiw/EPWumbZCrr0/s800/RowTooltips.png --- * 概要 [#summary] `JTable`の`Tooltips`が、カーソルのある行の内容などを表示するように設定します。 #download(https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTSbfFU7HI/AAAAAAAAAiw/EPWumbZCrr0/s800/RowTooltips.png) * サンプルコード [#sourcecode] #code(link){{ 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>"; } }; }} * 解説 [#explanation] `JTable#getToolTipText()`メソッドをオーバーライドして、カーソルがある行の情報を表示しています。 - `JTable#convertRowIndexToModel(...)`メソッドを使用して`viewRowIndex`を`modelRowIndex`に変更し、モデルから行情報を取得 - 第`1`列、第`2`列を`html`タグを使ってそれぞれ`ToolTipText`として設定 ---- 以下のように`setToolTipText(...)`メソッドを使用して、各行に`ToolTipText`を設定する方法もあります。 - `JTable#prepareRenderer(...)`メソッド内で`setToolTipText(...)`を使用する - 以下のように`JTable#prepareRenderer(...)`をオーバーライドしてその内部で`setToolTipText(...)`メソッドを使用し、各行に`ToolTipText`を設定する方法もある #code{{ 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(...)`を使用する #code{{ 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; } }); }} * 参考リンク [#reference] - [https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#celltooltip How to Use Tables (The Java™ Tutorials > Creating a GUI with JFC/Swing > Using Swing Components)] - [[JTableHeaderのTooltipsを列ごとに変更>Swing/HeaderTooltips]] - [[JTableのセルがクリップされている場合のみJToolTipを表示>Swing/ClippedCellTooltips]] * コメント [#comment] #comment - 名前もコメントも空の場合は、空のツールチップが表示されないように、`null`を返すようにした方がいいかも。 -- &user(aterai); &new{2007-04-04 (水) 19:26:19}; #comment