2011-09-08 19 views
7

私はJTreeTableを持っていて、マウスがセルの1つ上にあるときはいつでもツールチップを表示するためにMouseMotionListenerを実装しました。しかし、セルをクリックすると、ツールチップは表示されません。私はmouseClickedmouseReleasedイベントのテキストを設定するようないくつかの試みを試みましたが、うまくいきません。 tooltip popupを作るんmouseReleased方法で使用するためにマウスクリックでツールチップを表示する方法

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

if(toolTipAction != null){ 

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

が、それは間違った位置に、その後だ - 私はこのコードを発見しました。だから私はJTreeTablegetTooltipLocationメソッドをオーバーライドしようとしましたが、これはmouseMovedイベントでは問題なく動作しますが、上記のメソッドでは呼び出されません。誰もこれを行う方法についていくつかの光を当てることができますか? アンディ

答えて

0

org.apache.jorphan.gui.JTreeTableがjavax.swing.JComponentの javax.swing.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()メソッドをオーバーライドすることができます。 – camickr

関連する問題