JavaFX的工具提示showDuration不起作用
当用户复制文本字段中的数据时,我想在文本字段中显示一个工具提示,以通知他发生了这件事,这就是我的代码 公共类测试控制器{ @FXML私有文本字段文本字段; 私人最终剪贴板; 私有上下文菜单; 私有菜单项菜单副本; @FXML保护的void初始化{ 剪贴板=clipboard.getSystemClipboard; 菜单=新上下文菜单; menuCopy=新的MenuItemCopy; menuCopy.setOnActionthis::copy; textField.setContextMenumenu; } 私有void copyActionEvent事件{ 最终剪贴簿内容=新剪贴簿内容; ifTextField menu.getUserData.getSelectedText.length==0 content.putStringTextField menu.getUserData.getText; 其他的 content.putStringTextField menu.getUserData.getSelectedText; 剪贴板.setContentcontent; Point2D p=TextField menu.getUserData.localToScreen0,0; 工具提示测试=新工具提示; test.setShowDurationnew Duration2000; test.showTextField menu.getUserData、p.getX、p.getY; } }JavaFX的工具提示showDuration不起作用,java,javafx,tooltip,Java,Javafx,Tooltip,当用户复制文本字段中的数据时,我想在文本字段中显示一个工具提示,以通知他发生了这件事,这就是我的代码 公共类测试控制器{ @FXML私有文本字段文本字段; 私人最终剪贴板; 私有上下文菜单; 私有菜单项菜单副本; @FXML保护的void初始化{ 剪贴板=clipboard.getSystemClipboard; 菜单=新上下文菜单; menuCopy=新的MenuItemCopy; menuCopy.setOnActionthis::copy; textField.setContextMenu
但是设置显示持续时间似乎不起作用。它将永远显示。我认为这是您实现它的方式,我尝试过,它对我有效
PasswordField pf = new PasswordField();
Tooltip tooltip = new Tooltip("Your password must be\nat least 8 characters in length");
tooltip.setShowDuration(new Duration(2000));
pf.setTooltip(tooltip);
如果这对您不起作用,请尝试通过提供您的代码片段来帮助我们,我可以在不添加任何内容的情况下对其进行测试我认为这是您实现它的方式,我尝试过,它对我有效
PasswordField pf = new PasswordField();
Tooltip tooltip = new Tooltip("Your password must be\nat least 8 characters in length");
tooltip.setShowDuration(new Duration(2000));
pf.setTooltip(tooltip);
如果这对您不起作用,请尝试通过提供代码片段来帮助我们,我可以在不添加任何内容的情况下对其进行测试。当您通过1安装工具提示时,有三个事件处理程序添加到给定节点,都与鼠标事件相关。正是这些事件处理程序实现了showDelay和showDuration功能。这是通过使用时间线在内部完成的。但是,当您通过工具提示的一种显示方法手动显示工具提示时,您将完全绕过此行为2。换句话说,您的工具提示与任何其他PopupControl具有相同的功能
如果要手动显示工具提示并在指定时间后使其消失,则必须自己实现。以下是概念证明:
导入javafx.animation.PauseTransition;
导入javafx.scene.control.TextField;
导入javafx.scene.control.Tooltip;
导入javafx.util.Duration;
公共类NotifyingTextField扩展了TextField{
专用最终工具提示Tooltip=剪贴板上的新工具提示内容;
私有最终PauseTransition hideAnimation=新PauseTransition;
{
hideAnimation.durationProperty.bindtooltip.showDurationProperty;
hideAnimation.setonfinished->tooltip.hide;
工具提示.setShowDurationDuration.seconds2.0;
}
@凌驾
公开作废副本{
var selectedText=getSelectedText;
如果!selectedText.isEmpty{
超级复制;
变量点=localToScreen0,0;
tooltip.showthis、point.getX、point.getY;
hideAnimation.playbromstart;
}
}
}
当然,您可能会找到提供现成解决方案的第三方库
一,。即使设置属性(如Controltooltip或Tabtooltip),也会委托给installNode、Tooltip。
2.即使安装了工具提示,也是如此。手动调用show会绕过鼠标事件处理程序添加的所有功能。通过1安装工具提示时,会向给定节点添加三个事件处理程序,所有这些事件处理程序都与鼠标事件相关。正是这些事件处理程序实现了showDelay和showDuration功能。这是通过使用时间线在内部完成的。但是,当您通过工具提示的一种显示方法手动显示工具提示时,您将完全绕过此行为2。换句话说,您的工具提示与任何其他PopupControl具有相同的功能
如果要手动显示工具提示并在指定时间后使其消失,则必须自己实现。以下是概念证明:
导入javafx.animation.PauseTransition;
导入javafx.scene.control.TextField;
导入javafx.scene.control.Tooltip;
导入javafx.util.Duration;
公共类NotifyingTextField扩展了TextField{
专用最终工具提示Tooltip=剪贴板上的新工具提示内容;
私有最终PauseTransition hideAnimation=新PauseTransition;
{
hideAnimation.durationProperty.bindtooltip.showDurationProperty;
hideAnimation.setonfinished->tooltip.hide;
工具提示.setShowDurationDuration.seconds2.0;
}
@凌驾
公开作废副本{
var selectedText=getSelectedText;
如果!selectedText.isEmpty{
超级复制;
变量点=localToScreen0,0;
tooltip.showthis、point.getX、point.getY;
hideAnimation.playbromstart;
}
}
}
当然,您可能会找到提供现成解决方案的第三方库
一,。甚至设置属性,如Controltooltip或Tabtooltip
将委托给installNode,工具提示。
2.即使安装了工具提示,也是如此。手动调用show会绕过鼠标事件处理程序添加的所有功能。please。。请..设置这样的工具提示将在我将鼠标悬停在文本字段上时显示工具提示,并且我希望在按下上下文菜单项时显示工具提示。我将用更多代码更新我的主要帖子。设置这样的工具提示将在我将鼠标悬停在文本字段上时显示工具提示,并且我希望在按下关联菜单项时显示工具提示。我会用更多的代码更新我的主要帖子。