web-dev-qa-db-ja.com

jtableのセルにツールチップを追加する方法は?

各行が画像を表すテーブルがあります。 [Path]列には、その絶対パスを格納します。文字列が少し長いので、特定のセルの上にマウスを置くと、セルの情報を含むツールチップがマウスの横にポップアップ表示されます。

20

パスにカスタム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 (table, value, isSelected, hasFocus, row, column) */ );
        // 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
...
26

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;
            }
        };
34
user3223087

セルに絶対パスを格納すると言います。 絶対パス文字列の設定にJLabelを使用している可能性があります。セルにラベルがある場合、ツールチップのコンテンツを表現するためにhtmlタグを使用します。

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

setToolTipText()は、JLabel以外のものを使用している場合、他のSwingコンポーネントに使用できます。

0
Juvanis