2012-02-27 11 views

答えて

21

パスにはCellRendererというカスタムを書きませんでしたが、そのままDefaultTableCellRendererを使用しているとします。 DefaultTableCellRendererをサブクラス化し、getTableCellRendererComponentにツールチップを設定する必要があります。次に、その列のレンダラーを設定します。

class PathCellRenderer extends DefaultTableCellRenderer { 
    public Component getTableCellRendererComponent(
         JTable table, Object value, 
         boolean isSelected, boolean hasFocus, 
         int row, int column) { 
     JLabel c = (JLabel)super.getTableCellRendererComponent(// params from above); 
     // This... 
     String pathValue = <getYourPathValue>; // Could be value.toString() 
     c.setToolTipText(pathValue); 
     // ...OR this probably works in your case: 
     c.setToolTipText(c.getText()); 
     return c; 
    } 
} 

... 
pathColumn.setCellRenderer(new PathCellRenderer()); // If your path is of specific class (e.g. java.io.File) you could set the renderer for that type 
... 
+0

super.getTableCellRendererComponentを呼び出すことはできません。 – codenamezero

+2

@コード名ゼロなぜいけないのですか?サンプルコードでは、メソッドを非抽象的に持つ 'DefaultTableCellRenderer'をサブクラス化し、それ自体が' JLabel'ですか? –

0

セルに絶対パスを格納するとします。 絶対パス文字列には、おそらくJLabelを使用しています。ツールチップの内容を表現するためのHTMLタグを使用し、あなたのセルにラベルを持っていると仮定します。あなたはJLabelの以外のものを使用している場合

JLabel label = new JLabel("Bla bla"); 
label.setToolTipText("<html><p>information about cell</p></html>"); 

setToolTipText()は、他のいくつかのSwingコンポーネントのために使用することができます。

+0

deffinetly nope ... –

+1

*「deffinetly nope」* @deporterがそのコメントを理解しているのだろうかと思います。私は確かにしません。 :( –

+3

ちょっと正確にしてください:_あなたのcell_のラベルが誤解を招く可能性があります(セル内にコンポーネントは存在してはいけません)代わりにレンダラーによって提供されるラベルです。 ) – kleopatra

25

ただ、JTableのオブジェクトの作成しながら、コードの下に使用します。

JTable auditTable = new JTable(){ 

      //Implement table cell tool tips.   
      public String getToolTipText(MouseEvent e) { 
       String tip = null; 
       java.awt.Point p = e.getPoint(); 
       int rowIndex = rowAtPoint(p); 
       int colIndex = columnAtPoint(p); 

       try { 
        tip = getValueAt(rowIndex, colIndex).toString(); 
       } catch (RuntimeException e1) { 
        //catch null pointer exception if mouse is over an empty line 
       } 

       return tip; 
      } 
     }; 
+0

実際、私はそれが受け入れられた解決策よりも効率的だと思います。 –

+0

一部の列に基づいてテーブルを並べ替えると、これが機能しないことがあります。 –

+0

'getRowSorter()。convertRowIndexToModel(rowIndex)'と 'getRowSorter()。convertRowIndexToModel(rowIndex)'を使用して、モデルから正確な行を取得します。 –

関連する問題