Как показать подсказку по щелчку мыши - PullRequest
7 голосов
/ 08 сентября 2011

У меня есть 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 ]

11 голосов
/ 09 сентября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...