2012-05-04 11 views
0

JPanelを含む1つの列を持つテーブルがあります。私はカスタムレンダラとエディタを書いており、うまく動作します。ただし、パネルにはツールチップを含むJLabelコンポーネントが含まれています。セルをクリックしてラベルにカーソルを合わせるとツールチップが表示されますが、マウスをセルに移動してJLabel上にマウスを置くとツールチップが表示されません。私はPanelオブジェクトを取得し、それがフォーカスを持っているようにするために、以下に示すようにマウスリスナーをテーブルに追加しました。JTableのJPanelはマウスのクリックにフォーカスを当てますが、マウスの上には移動しません

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オブジェクトを取得していますが、フォーカスが得られないようです。セル内をクリックすると、パネルにフォーカスが置かれているように見えますが、マウスを動かすことはできません。

答えて

2

テキストをツールチップに表示したい場合は、レンダラーが返すコンポーネントにツールチップを設定すれば十分です。あなたがツールヒントのテキストレンダリングをコンポーネントに要求され、そのコンポーネントがを求めているのかを決定するために、見ることができるように、私は

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

の下にコピーされたJTable#getTooltipText方法、の実装を見ればこれは見ることができますそのツールチップのテキストもちろん、これはテキストの場合にのみ機能し、例えばテキストなどでは機能しません。画像

+0

ありがとうございます。アップ投票され、私の答えは削除されました。 –

関連する問題