【问题标题】:awt.TrayIcon is it posible to distinguish between a double click on the tray icon and a close of a balloon message?awt.TrayIcon 是否可以区分双击托盘图标和关闭气球消息?
【发布时间】:2012-12-19 07:08:25
【问题描述】:

目前在我的(JRuby 代码)中,我想以不同于“双击托盘图标”(awt.TrayIcon 实例)的方式处理“气球关闭”消息:

import java.awt.TrayIcon
import java.awt.event.MouseListener

tray = java.awt.SystemTray::system_tray
image = java.awt.Toolkit::default_toolkit.get_image('')

trayIcon = TrayIcon.new(image, 'name', nil)

tray.add(trayIcon)
trayIcon.addActionListener do |evt|
  puts "in here", evt.id
end
trayIcon.displayMessage("title", "try clicking within the baloon, but not the x, then double clicking the tray icon", TrayIcon::MessageType::INFO)
puts "try clicking within the balloon message, or double clicking, both seem to generate the same event"

和java中的等效代码https://gist.github.com/4338167

似乎当 1) 用户双击系统托盘中的图标,或 2) 用户通过单击气球(而不是 x)关闭托盘的最近气球消息时,会调用此操作侦听器。

是否可以区分两种不同的事件类型(两者似乎都有事件 id 1001),或者我必须通过相对时间或其他方式来推断它?或者我能以某种方式“知道”气球还在上升,因此点击肯定来自它?

【问题讨论】:

  • 拜托我迷失在 Ruby 中,我们是在谈论 How to Use the System Tray,还是发布 SSCCE,确定双击或鼠标事件到消息没有问题,有几次我回答了 AWT / Swing
  • ok 添加了 jruby 和 java 示例(是的)。我的问题不是如何确定双击,而是更多如何确定气球何时关闭双击,两者似乎都发送相同的消息......

标签: java awt jruby actionlistener system-tray


【解决方案1】:

TrayIcon 的文档似乎暗示单击气球消息可以触发 ActionEvent,就您而言,这与双击图标本身相同。

您可能需要添加一个鼠标侦听器来触发点击,如果点击事件之后在一段时间内出现ActionEvent,则为双击,否则为点击正在显示的消息。通过选择足够小的间隔,您应该能够正确区分它们。

【讨论】:

  • 是的,我认为这样的事情可能是必要的......尝试“计算”自上次点击发生以来所花费的时间等等......谢谢!
  • 我有同样的问题(在 Java 程序中),并注意到根据经验,单击气球伴随着事件修饰符字段中的 1024 位。但我不知道该怎么做——1024 = TEXT_EVENT_MASK,这没有多大意义。但我也注意到 Shift 和其他修饰符的显示方式与记录的不同(例如,Shift 应该是 SHIFT_MASK (1) 的值,但它显示为 64)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多