【问题标题】:Java: How to drag and drop on a TrayIcon?Java:如何在 TrayIcon 上拖放?
【发布时间】:2011-10-07 10:34:22
【问题描述】:

如何捕获文本/文件/任何其他 DataFlavor 到 java.awt.TrayIcon(放置在 java.awt.SystemTray)上的放置事件?

【问题讨论】:

    标签: java swing drag-and-drop


    【解决方案1】:

    显然这还不支持(Java 1.7)。 如果有人感兴趣,我已经创建了一个功能请求Sun Feature Request 7119272 - 如果您愿意,您可以监控进度并为它投票。

    【讨论】:

      【解决方案2】:

      如果你在 TrayIcon 上添加一个 mousemotionlistener 并对漂浮在 TrayIcon 上的水滴做出反应会怎样。然后,当鼠标悬停在 TrayIcon 的 mousemotionlistener 上时,将显示一个具有拖放支持的 JList,该 JList 反过来将接收可放置对象。

      【讨论】:

      • 谢谢,这是一个好主意,我尝试按照您的建议进行操作,但找不到让 TrayIcon 显示任何内容的方法。
      【解决方案3】:

      试试下面的代码。每当鼠标移到托盘图标上时它就会触发。

          Toolkit.getDefaultToolkit().addAWTEventListener
          (
             new java.awt.event.AWTEventListener() {
                @Override
                public void eventDispatched(java.awt.AWTEvent event)
                {
                    if (event.getID() == java.awt.event.MouseEvent.MOUSE_MOVED)
                    {
                          // add here your stuff
                    }
                }//eventDispatched
             }//AWTEventListener
          ,  java.awt.AWTEvent.MOUSE_MOTION_EVENT_MASK
          );
      

      【讨论】:

      • 更准确地说:我刚刚为你粘贴的代码,只要你在 TrayIcon 上放置一个 droppable 就会触发。释放 droppable 后,您将进入上面的 if 语句。
      • 谢谢,但是每次将鼠标移到我的 Swing 应用程序的任何组件(包括托盘图标)上时,您提供的代码都会触发。如果您相信您建议的解决方案,请尝试编写一个完整的示例 - 我不能。
      【解决方案4】:

      你必须扩展你的 TrayIcon 并将我给你的部分添加到这个扩展的 TrayIcon 中。这样,它只会为扩展托盘图标的移动事件触发。剩下的交给你了。

      【讨论】:

      • 进一步,您可以添加一个简单的 if 语句来仅处理来自您感兴趣的组件的事件。当然这不是很好,但不要忘记,只要不支持直接拖放,这应该是一种解决方法
      猜你喜欢
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      相关资源
      最近更新 更多