【问题标题】:Hovering over JButtons and displaying a message将鼠标悬停在 JButtons 上并显示一条消息
【发布时间】:2013-02-20 20:10:25
【问题描述】:

我想将鼠标悬停在我的 GUI(地图)上的多个 JButton 上并显示该位置的名称,例如曼彻斯特和伦敦。我的代码适用于一个按钮,但它不适用于一个以上的按钮,并为所有按钮位置打印最后一个 out 消息(因为我有 10 个按钮)。

如果button1 为真,则通过我的paintComponent() 方法在指定区域的GUI 上绘制文本。

我该如何解决这个问题?

button1.addMouseMotionListener(this);
button2.addMouseMotionListener(this);
public void mouseMoved(MouseEvent arg0)
{
    if(button1.contains(arg0.getPoint()))
    {
        button1  = true;
        out = "test 1";
        repaint();
    }

    if(!button1.contains(arg0.getPoint()))
    {
        b1 = false;
        out = " ";
        repaint();
    }//same for all 10 buttons but change variables
}

【问题讨论】:

    标签: java swing tooltip jbutton mousemotionevent


    【解决方案1】:

    为什么不使用已经存在的工具提示 API?

    button.setTooltip("Manchester");
    

    您甚至可以使用 HTML 文本来生成格式化结果。

    button.setTooltip("<html>Manchester<br>53.4800° N, 2.2400° W</html>");
    

    如果图片是嵌入的,你甚至可以提供图片...

    button.setTooltip("<html><img src=" + getClass().getResource("/someimage") + "/>Manchester<br>53.4800° N, 2.2400° W</html>");
    

    【讨论】:

    • “如果图像被嵌入,你甚至可以提供图像......” 它们不一定必须嵌入,但如果是这样的话 a) 更快& b) 可由沙盒应用程序使用。
    • @AndrewThompson 是的,它可以是任何有效的URL
    【解决方案2】:
    • 不要使用JButton中的MouseListenerMosueMotionListener,这个方法在JButtons API中正确实现,

    • 没有理由,我找不到使用 repaint() 来完成这项工作的理由

    • 另一种方法是将ChangeListener 添加到JButton 并从派生的ButtonModel 中获取相关事件

    • 为了获得更好的帮助,请尽快发布 SSCCE,简短、可运行、可编译,大约是 JFrame 和一个 JButton

    【讨论】:

      【解决方案3】:

      这个答案对 JDK 8 用户来说很酷,所以试试吧:

      普通文本

      buttonyoumade.setToolTipText("Text you choose");
      

      供html使用

      anotherbuttonyoumade.setToolTipText("<html> any valid html code </html>");
      

      【讨论】:

        猜你喜欢
        • 2011-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-27
        • 1970-01-01
        • 2013-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多