首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在鼠标单击时显示工具提示

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

Stack Overflow用户
提问于 2011-09-09 02:51:28
回答 2查看 10.6K关注 0票数 8

我有一个JTreeTable,并且已经成功地实现了一个MouseMotionListener,只要鼠标停留在其中一个单元格上,它就会显示工具提示。但是,当单击单元格时,工具提示不会显示出来。我尝试了几种方法,比如在mouseClickedmouseReleased事件上设置文本,但都不起作用。我找到了这个代码-

代码语言:javascript
复制
Action toolTipAction = treeTable.getActionMap().get("postTip");

if(toolTipAction != null){

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

mouseReleased方法中使用,它确实生成了tooltip popup,但它的位置是错误的。因此,接下来我尝试覆盖JTreeTable上的getTooltipLocation方法,这对mouseMoved事件很有效,但上面的方法不会调用它。有人能解释一下如何做到这一点吗?

谢谢安迪

EN

回答 2

Stack Overflow用户

发布于 2011-09-09 12:04:24

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

代码语言:javascript
复制
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();
            }
        });
    }
}
票数 12
EN

Stack Overflow用户

发布于 2011-09-09 04:57:28

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7353021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档