2011-09-08 3 views
7

나는 JTreeTable을 가지고 있고 MouseMotionListener을 성공적으로 구현하여 마우스가 셀 중 하나 위에 올 때마다 툴팁을 표시합니다. 그러나 셀을 클릭하면 툴팁이 나타나지 않습니다. mouseClickedmouseReleased 이벤트에서 텍스트를 설정하는 것과 같은 몇 가지 작업을 시도했지만 작동하지 않습니다. 이 코드 발견 -마우스로 툴팁을 표시하는 방법

Action toolTipAction = treeTable.getActionMap().get("postTip"); 

if(toolTipAction != null){ 

    ActionEvent postTip = new ActionEvent(treeTable,ActionEvent.ACTION_PERFORMED, ""); 
    toolTipAction.actionPerformed(postTip);  
} 

tooltip popup을 수행하는 mouseReleased 방법에 사용하는,하지만 그것은 잘못된 위치에 다음입니다. 그래서 난 JTreeTablegetTooltipLocation 메서드를 재정의하는 시도,이 괜찮 았던 mouseMoved 이벤트에 대한 작동하지만 위의 방법으로 호출하지 않습니다. 누구든지이 작업을 수행하는 방법에 대해 설명 할 수 있습니까?

감사 앤디

답변

0

org.apache.jorphan.gui.JTreeTable는 JComponent을 JComponent을 # setToopTipText() 작동하지 않습니다 확장? 액션을 사용하고 싶지만 툴팁을 사용하고 싶다는 것을 알고 있습니까? 여러 UI 작업을 공유해야하는 경우 Action을 사용합니다.

11

다음 방법을 사용하여 툴팁을 표시 할 수 있습니다 (약간의 지연이 있음).

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ToolTipOnRelease extends JPanel 
{ 
    public ToolTipOnRelease() 
    { 
     JLabel label = new JLabel("First Name:"); 
     add(label); 

     JTextField textField = new JTextField(15); 
     add(textField); 

     MouseListener ml = new MouseAdapter() 
     { 
      public void mouseReleased(MouseEvent e) 
      { 
       JComponent component = (JComponent)e.getSource(); 
       component.setToolTipText("Mouse released on: " + component.getClass().toString()); 

       MouseEvent phantom = new MouseEvent(
        component, 
        MouseEvent.MOUSE_MOVED, 
        System.currentTimeMillis(), 
        0, 
        0, 
        0, 
        0, 
        false); 

       ToolTipManager.sharedInstance().mouseMoved(phantom); 
      } 
     }; 

     label.addMouseListener(ml); 
     textField.addMouseListener(ml); 
    } 

    private static void createAndShowUI() 
    { 
     JFrame frame = new JFrame("ToolTipOnRelease"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(new ToolTipOnRelease()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) 
    { 
     EventQueue.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       createAndShowUI(); 
      } 
     }); 
    } 
} 
+0

완벽, 당신은 대답을 "동의 함"을 할 수 있습니다 – user935339

+4

user935339 @ 좋은 덕분에 작동 : 그런 다음에서 MouseEvent 지금 생성됩니다 이후 getToolTipLocation() 메소드를 오버라이드 (override) 할 수 있습니다. – camickr

관련 문제