0

JPanels を含む 1 つの列を持つテーブルがあります。カスタム レンダラーとエディターを作成しましたが、正常に動作します。ただし、パネルには、ツール ヒント付きの JLabel コンポーネントが含まれています。セルをクリックしてラベルにカーソルを合わせると、ツール ヒントが表示されますが、マウスをセルに移動して JLabel にカーソルを合わせると、ツール ヒントは表示されません。以下に示すように、Panel オブジェクトを取得してフォーカスを設定しようとするテーブルにマウス リスナーを追加しました。

public void mouseMoved(MouseEvent e) {
    Point p = e.getPoint();
    int row = table.rowAtPoint(p);
    int column = table.columnAtPoint(p);
    System.out.println(row + " " + column);
    Object o = table.getModel().getValueAt(row, column);
    if (o instanceof FileInfoCellPanel) {
        FileInfoCellPanel ficp = (FileInfoCellPanel)o;
        ficp.requestFocusInWindow();
        //ficp.revalidate();
    }
}

私は間違いなく正しい JPanel オブジェクトを取得していますが、フォーカスが得られないようです。そのため、セルをクリックするとパネルにフォーカスが移るように見えますが、マウスを動かしてもそうではありません。

4

1 に答える 1

2

ツールチップにテキストのみを表示したい場合は、レンダラーによって返されるコンポーネントにツールチップを設定するだけで十分です。JTable#getTooltipTextこれは、以下にコピーしたメソッドの実装を見るとわかります

public String getToolTipText(MouseEvent event) {
    String tip = null;
    Point p = event.getPoint();

    // Locate the renderer under the event location
    int hitColumnIndex = columnAtPoint(p);
    int hitRowIndex = rowAtPoint(p);

    if ((hitColumnIndex != -1) && (hitRowIndex != -1)) {
        TableCellRenderer renderer = getCellRenderer(hitRowIndex, hitColumnIndex);
        Component component = prepareRenderer(renderer, hitRowIndex, hitColumnIndex);

        // Now have to see if the component is a JComponent before
        // getting the tip
        if (component instanceof JComponent) {
            // Convert the event to the renderer's coordinate system
            Rectangle cellRect = getCellRect(hitRowIndex, hitColumnIndex, false);
            p.translate(-cellRect.x, -cellRect.y);
            MouseEvent newEvent = new MouseEvent(component, event.getID(),
                                      event.getWhen(), event.getModifiers(),
                                      p.x, p.y,
                                      event.getXOnScreen(),
                                      event.getYOnScreen(),
                                      event.getClickCount(),
                                      event.isPopupTrigger(),
                                      MouseEvent.NOBUTTON);

            tip = ((JComponent)component).getToolTipText(newEvent);
        }
    }

    // No tip from the renderer get our own tip
    if (tip == null)
        tip = getToolTipText();

    return tip;
}

ご覧のとおり、ツールチップ テキストを決定するために、レンダラーはコンポーネントを要求され、そのコンポーネントはツールチップ テキストを要求されます。もちろん、これはテキストに対してのみ機能し、画像などに対しては機能しません

于 2012-05-04T19:55:01.903 に答える