Как показать подсказку по клику мыши

У меня есть JTreeTable и успешно реализовали MouseMotionListener показывать всплывающую подсказку, когда мышь находится над одной из ячеек. Однако при нажатии на ячейку всплывающая подсказка не отображается. Я пробовал несколько вещей, таких как установка текста на mouseClicked а также mouseReleased события, но это не работает. Я нашел этот код -

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

if(toolTipAction != null){

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

использовать в mouseReleased метод, который делает tooltip popup, но тогда это не в том положении. Итак, затем я попытался переопределить getTooltipLocation метод на JTreeTableи это прекрасно работает для mouseMoved события, но не вызывается с помощью вышеуказанного метода. Может кто-нибудь пролить свет на то, как это сделать?

Спасибо энди

2 ответа

Вы можете использовать следующий подход, чтобы показать подсказку (будет небольшая задержка). Затем вы можете переопределить метод 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();
            }
        });
    }
}

org.apache.jorphan.gui.JTreeTable extends javax.swing.JComponent javax.swing.JComponent#setToopTipText() не работает? Я понимаю, что вы хотите использовать действие, но для всплывающих подсказок? Я бы использовал Action, когда несколько действий пользовательского интерфейса должны были делиться им.

Другие вопросы по тегам