2009-10-07 2 views
3

JTree와 비슷한 구현 된 사용자 정의 스윙 컴포넌트가 있습니다. CellRenderer를 사용하여 객체 목록을 렌더링하는 ComponentUI가 있습니다. 툴팁은 각 렌더링 된 셀에 대해 올바르게 표시되지만 원하는대로 마우스를 추적하지는 않습니다. 예를 들어, 내가 상자를 이런 식으로 배치 한 경우;스윙에서의 지속적인 툴팁 업데이트

 
[ box A ] [ box B ] [ box C ] [ box D ] 

나는 상자 마우스가 상자에게 경계를 교차하는에 대한 도구 설명을 볼 수이 상자를 통해 마우스를 드래그합니다. 마우스를 계속 움직이면 툴팁이 포인터를 추적하지 않습니다. 상자를 닫을 때 툴팁이 적절히 사라집니다. 내가 교차 할 때 상자 B 같은 일이 일어난다.

제 생각에 툴팁은 getToolTipText(MouseEvent event)의 내용이 변경 될 때만 뷰를 업데이트합니다. 내가 원하는 동작은 getToolTipText에 의해 반환 된 내용에 관계없이 툴팁이 포인터 위치를 추적하도록하는 것입니다. 빠른 해킹은 메서드에 대한 짝수/홀수 호출을 기반으로 빈 공간을 추가 및 제거하는 것입니다. 이것은 효과가 있지만, 내가 그것을하기로되어있는 방식 일 수는 없습니다.

이 문제를 해결하기위한 해킹이 아닌 해킹 방법을 찾고 있습니다. 나는 누군가가 마우스 어딘가에 관계없이 마우스를 따라가는 툴팁을 강제로 어딘가에 알고있는 희망이있다.

답변

6

셀 렌더러에서 getToolTipLocation을 재정의하십시오.

+0

Ahh, Sweet !!! 감사. 나는 간단한 방법이 있어야한다는 것을 알았고, 전체적으로 내 앞에서 옳았다. – reccles

+0

실제로 셀 렌더러가 아닌 구성 요소의 일부로 만들었습니다. 그 행동은 세포에 비해 더 적절할 것 같습니다. – reccles

+0

나는 그것이 기뻤다! –

0

JList의 요소를 가리킬 때 getToolTipLocation을 사용하여 툴팁 위치를 설정하려고했지만 작동하지 않았습니다.

public class DefinitionListCellRenderer extends JTextArea implements 
     ListCellRenderer, ComponentListener { 

... 

    @Override 
    public Point getToolTipLocation(MouseEvent event) { 
     Point pt = new Point(event.getX(), event.getY()); 
     return pt; 
    } 


... 

} 

getToolTipLocation 심지어 호출되지 않습니다! :

중단 점을 삽입 한 후 그러한 코드 것으로 나왔다 왜 그러시 겠어요? DefinitionListCellRenderer는 목록에있는 단일 항목 (getListCellRendererComponent()가 있음)입니다.

+0

구성 요소가 툴팁 공급자에 등록되어 있는지 확인하십시오. ToolTipManager.sharedInstance(). registerComponent (component); – reccles