JButton以编程方式显示工具提示:actionMap.get(“post Type”)为null

时间:2012-11-28 06:25:49

标签: java swing tooltip jbutton focuslistener

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

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

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

我引用code @camickr

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

但toolTipAction设置为null。

我已使用此代码打印了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设为null,我怎么能调用这段代码?

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

2 个答案:

答案 0 :(得分:2)

您还可以尝试使用其他方法配置工具提示管理器,以便在输入鼠标时立即显示工具提示。

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

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

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

答案 1 :(得分:2)

  

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

  • 使用JWindow(未修饰的JDialog)或JLabel代替ToolTipJLabel by @Guillaume Polet和{{3}的示例}}

  • 您可以将此容器放置到Mouse Cursor的位置或坚持绝对坐标,Point到可见的GUI

  • 标准可能(可能很烦人)请参阅here