【问题标题】:How to show a tooltip on a mouse click如何在鼠标单击时显示工具提示
【发布时间】:2011-11-13 06:13:35
【问题描述】:

我有一个JTreeTable 并且已经成功实现了一个MouseMotionListener 以在鼠标悬停在其中一个单元格上时显示一个工具提示。但是,当单击单元格时,工具提示不会显示。我尝试了几件事,例如在 mouseClickedmouseReleased 事件上设置文本,但这不起作用。我找到了这段代码-

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 事件有效,但不会被上述方法调用。谁能解释一下如何做到这一点?

谢谢 安迪

【问题讨论】:

    标签: java swing tooltip jtreetable


    【解决方案1】:

    您可以使用以下方法显示工具提示(会有一点延迟)。然后您可以覆盖 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();
                }
            });
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-07
        • 1970-01-01
        • 2023-02-02
        • 1970-01-01
        • 2010-09-15
        相关资源
        最近更新 更多