Swing/RowTooltips のバックアップ(No.16)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/RowTooltips へ行く。
- 1 (2005-03-28 (月) 02:50:10)
- 2 (2005-04-28 (木) 04:32:57)
- 3 (2005-10-22 (土) 17:31:01)
- 4 (2006-02-27 (月) 16:21:16)
- 5 (2007-04-04 (水) 13:24:48)
- 6 (2007-04-04 (水) 16:14:19)
- 7 (2007-04-04 (水) 17:59:16)
- 8 (2007-04-04 (水) 19:18:31)
- 9 (2007-05-11 (金) 11:31:00)
- 10 (2008-07-13 (日) 00:51:42)
- 11 (2008-11-27 (木) 11:25:53)
- 12 (2008-11-27 (木) 12:32:15)
- 13 (2009-10-12 (月) 17:45:31)
- 14 (2010-05-08 (土) 04:08:41)
- 15 (2010-05-11 (火) 20:51:26)
- 16 (2011-03-19 (土) 19:40:47)
- 17 (2011-03-20 (日) 18:43:02)
- 18 (2012-11-23 (金) 04:42:06)
- 19 (2013-02-20 (水) 13:39:30)
- 20 (2013-03-30 (土) 21:05:11)
- 21 (2015-01-30 (金) 19:35:32)
- 22 (2016-08-05 (金) 12:56:01)
- 23 (2017-04-04 (火) 14:17:08)
- 24 (2017-10-03 (火) 13:50:58)
- 25 (2019-04-05 (金) 16:01:11)
- 26 (2019-05-22 (水) 19:35:38)
- 27 (2021-01-14 (木) 17:58:54)
- 28 (2023-07-21 (金) 15:35:46)
TITLE:JTableのTooltipsを行ごとに変更
Posted by aterai at 2004-03-28
JTableのTooltipsを行ごとに変更
JTableのTooltipsが、カーソルのある行の内容などを表示するようにします。
- &jnlp;
- &jar;
- &zip;
サンプルコード
JTable table = new JTable(model) {
public String getToolTipText(MouseEvent e) {
int row = rowAtPoint(e.getPoint());
TableModel m = getModel();
return "<html>"+m.getValueAt(row, 1)+"<br>"
+m.getValueAt(row, 2)+"</html>";
}
};
解説
JTableのgetToolTipTextメソッドをオーバーライドして、カーソルがある行の情報を表示しています。第1列、第2列をhtmlタグを使ってそれぞれTooltipsにしています。
上記のサンプルでは、モデルにTableSorter.javaを使っているので、行のソートや列の移動があってもマウスの下の行の情報を一定のレイアウト*1で表示するように、セルの値の取得には、Table#getValueAtメソッドではなく、TableModel#getValueAtメソッドを使っています。
JDK 1.6 で導入されたTableRowSorterを使用して、上記の同じ動作をするツールチップにする場合は、新しく追加されたJTable#convertRowIndexToModelメソッドを使ってviewRowIndexをmodelRowIndexに変更してモデルから行情報を取得したり、逆にJTable#convertColumnIndexToViewメソッドを使って、modelColumnIndexからviewColumnIndexに変換してJTable#getValueAtメソッドを使う方法などがあります。
JTable table = new JTable(model) {
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>";
//int row = rowAtPoint(e.getPoint());
//int vc1 = convertColumnIndexToView(1);
//int vc2 = convertColumnIndexToView(2);
//return "<html>"+getValueAt(row, vc1)+"<br>"+getValueAt(row, vc2)+"</html>";
}
};
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
以下のように、JTable#prepareRenderer メソッドや、CellRendererなどでsetToolTipTextを使用する方法でも、ツールチップを設定することができます。
JTable table = new JTable() {
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() {
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;
}
});
参考リンク
- How to Use Tables (The Java™ Tutorials > Creating a GUI with JFC/Swing > Using Swing Components)
- JTableHeaderのTooltipsを列ごとに変更
- JTableのセルがクリップされている場合のみJToolTipを表示
コメント
- 名前もコメントも空の場合は、空のツールチップが表示されないように、nullを返すようにした方がいいかも。 -- aterai