如何在鼠标单击时显示工具提示

use*_*339 7 java swing tooltip jtreetable

我有一个JTreeTable并且已成功实现了MouseMotionListener一个只要鼠标位于其中一个单元格上就显示工具提示.但是,单击单元格时,工具提示不会显示.我已经尝试过几样的事情,例如在事件mouseClickedmouseReleased事件上设置文本,但这不起作用.我发现这个代码 -

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

if(toolTipAction != null){

   ActionEvent postTip = new ActionEvent(treeTable,ActionEvent.ACTION_PERFORMED, "");
   toolTipAction.actionPerformed(postTip);    
}
Run Code Online (Sandbox Code Playgroud)

mouseReleased方法中使用,它确实使用tooltip popup,但它然后处于错误的位置.所以接下来我尝试重写getTooltipLocation方法JTreeTable,这对mouseMoved事件很好,但不会用上面的方法调用.任何人都可以阐明如何做到这一点?

谢谢安迪

cam*_*ckr 11

您可以使用以下方法显示工具提示(稍有延迟).然后您可以覆盖getToolTipLocation()方法,因为现在将生成MouseEvent:

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();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @ user935339,那么你可能想"接受"答案. (4认同)

Ust*_*gat 0

org.apache.jorphan.gui.JTreeTable 扩展 javax.swing.JComponent javax.swing.JComponent#setToopTipText() 不起作用?我确实意识到您想使用 Action 但用于工具提示?当多个 UI 操作需要共享它时,我会使用 Action。