Swing/RowTooltips のバックアップの現在との差分(No.15)
TITLE:JTableのTooltipsを行ごとに変更
Posted by terai at 2004-03-28
JTableのTooltipsを行ごとに変更
JTableのTooltipsが、カーソルのある行の内容などを表示するようにします。- 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:
概要
JTable
のTooltips
が、カーソルのある行の内容などを表示するように設定します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
#screenshot
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
JTable table = new JTable(model) {
public String getToolTipText(MouseEvent e) {
int row = rowAtPoint(e.getPoint());
@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>";
return "<html>" + m.getValueAt(row, 1) + "<br>"
+ m.getValueAt(row, 2) + "</html>";
}
};
解説
JTableのgetToolTipTextメソッドをオーバーライドして、カーソルがある行の情報を表示しています。第1列、第2列をhtmlタグを使ってそれぞれTooltipsにしています。解説
JTable#getToolTipText()
メソッドをオーバーライドして、カーソルがある行の情報を表示しています。
上記のサンプルでは、モデルにTableSorter.javaを使っているので、行のソートや列の移動があってもマウスの下の行の情報を一定のレイアウト*1で表示するように、セルの値の取得には、Table#getValueAtメソッドではなく、TableModel#getValueAtメソッドを使っています。
-
JTable#convertRowIndexToModel(...)
メソッドを使用してviewRowIndex
をmodelRowIndex
に変更し、モデルから行情報を取得 - 第
1
列、第2
列をhtml
タグを使ってそれぞれToolTipText
として設定
JDK 1.6 で導入されたTableRowSorterを使用して、上記の同じ動作をするツールチップにする場合は、新しく追加されたJTable#convertRowIndexToModelメソッドを使ってviewRowIndexをmodelRowIndexに変更してモデルから行情報を取得したり、逆にJTable#convertColumnIndexToViewメソッドを使って、modelColumnIndexからviewColumnIndexに変換してJTable#getValueAtメソッドを使う方法などがあります。
- 以下のように
JTable#prepareRenderer(...)
をオーバーライドしてその内部でsetToolTipText(...)
メソッドを使用し、各行にToolTipText
を設定する方法もある#spandel JTable table = new JTable(model) { #spanend 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>"; } #spandel }; #spanend #spandel TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); #spanend #spandel table.setRowSorter(sorter); #spanend #spandel
- -
以下のように、JTable#prepareRenderer メソッドや、CellRendererなどでsetToolTipTextを使用する方法でも、ツールチップを設定することができます。
#spanend JTable table = new JTable() { public Component prepareRenderer(TableCellRenderer tcr, int row, int column) { @Override public Component prepareRenderer( TableCellRenderer tcr, int row, int column) { Component c = super.prepareRenderer(tcr, row, column); if(c instanceof JComponent) { 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); 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() { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); //... @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; } });
参考リンク
- How to Use Tables (The Java? Tutorials > Creating a GUI with JFC/Swing > Using Swing Components)
- JTableHeaderのTooltipsを列ごとに変更
- JTableのセルがクリップされている場合のみJToolTipを表示
参考リンク
- How to Use Tables (The Java™ Tutorials > Creating a GUI with JFC/Swing > Using Swing Components)
- JTableHeaderのTooltipsを列ごとに変更
- JTableのセルがクリップされている場合のみJToolTipを表示
コメント
- 名前もコメントも空の場合は、空のツールチップが表示されないように、nullを返すようにした方がいいかも。 -- terai
コメント
- 名前もコメントも空の場合は、空のツールチップが表示されないように、
null
を返すようにした方がいいかも。 -- aterai