1

当我的 button2 获得焦点时,我需要以编程方式显示它的工具提示。(我按 Tab 作为最初的焦点在按钮 1)

            JButton button = new JButton("Button 1");

            JButton button2 = new JButton("Button 2");
            button2.setToolTipText("tooltip2");
            button2.addFocusListener(new FocusListener());

我参考@camickr的代码

private class FocusListener extends FocusAdapter {
 public void focusGained(FocusEvent e)
 {
    JComponent component = (JComponent)e.getSource();
    Action toolTipAction = component.getActionMap().get("postTip");

但 toolTipAction 设置为空。

我已经使用此代码打印了 ActionMap 的所有条目

        ActionMap actionMap = component.getActionMap();
        Object[] actionMapKeys = actionMap.allKeys();

        for (int i = 0; i < actionMapKeys.length; i++) {
            Object key = actionMapKeys[i];
            System.out.println(key.toString() + " : " + actionMap.get(key).toString());
        }

这就是它给我的

pressed : javax.swing.plaf.basic.BasicButtonListener$Actions@49cf9f
released : javax.swing.plaf.basic.BasicButtonListener$Actions@1de0b5e

那么如果我的 toolTipAction 为空,我该如何调用这段代码呢?

ActionEvent postTip = new ActionEvent(component, ActionEvent.ACTION_PERFORMED, "");
toolTipAction.actionPerformed(postTip);
4

2 回答 2

2

您还可以尝试配置工具提示管理器以在输入鼠标时立即显示工具提示的替代方法。

javax.swing.ToolTipManager.sharedInstance().setInitialDelay(0)

如果您希望仅对某些组件发生这种情况,则可以根据获得焦点的组件更改此值。

Ctrl+F1按下时也会显示工具提示。java.awt.Robot因此,当您想显示工具提示时,您可以在按钮上使用 Ctrl+F1 来模拟。

于 2012-11-28T06:40:11.910 回答
2

实际上我想在一些网络事件上显示工具提示,这与鼠标无关。但我已经开始通过 Tab 键获得焦点的实验

于 2012-11-28T06:53:53.583 回答