Как показать подсказку по клику мыши
У меня есть 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, когда несколько действий пользовательского интерфейса должны были делиться им.