一、Node组件可以很容易的添加Tooltip

在JavaFX2中,Tooltip可以很容易的实现在所有的Node组件中,如:

Button button = new Button("Hover Over Me");  
button.setTooltip(new Tooltip("Tooltip for Button"));

或者

Rectangle rect = new Rectangle(0, 0, 100, 100);  
Tooltip t = new Tooltip("A Square");  
Tooltip.install(rect, t);

可是有些特殊的组件并继承于Node,比如MenuItem。

二、有两种办法为MenuItem实现Tooltip

1. 使用CustomMenuItem类它允许封装任意的Node作为显示内容,此时为具体的Node添加Tooltip即可。

  • 这个方法会比较麻烦,需要先定义一个通用的CustomMenuItem菜单项,但是这样一来原本值需要为MenuItem定义的CSS现在要重新修改了

2. 响应MenuItem的激活和取消显示事件

  • 在鼠标移到某个菜单项上面时,就会响应MenuValidation事件,此时显示Tooltip
  • 在鼠标移到其他菜单项时,会触发其他菜单项的MenuValidation事件,Tooltip会刷新
  • 在菜单消失时,会触发Hidden事件,此时隐藏Tooltip

见下面的代码:

curMenu.setOnMenuValidation(new EventHandler<Event>() {  
  
    @Override  
    public void handle(Event t) {  
        String help = "This is tooltip!";  
  
        if (tooltip == null) {  
            tooltip = new Tooltip();  
            tooltip.setWrapText(true);  
            tooltip.setTextAlignment(TextAlignment.LEFT);  
            tooltip.setPrefSize(200, 200);  
            tooltip.setMinSize(200, 100);  
        }  
        tooltip.setText(help);  
  
        Window window = target.getContextPane().getScene().getWindow();  
        double x = window.getX() + window.getWidth() - tooltip.getPrefWidth() - 50;  
        double y = window.getY() + 50;  
        tooltip.show(window, x, y);//将tooltip显示在Window的右上角  
    }  
});  
curMenu.setOnHidden(new EventHandler<Event>() {  
  
    @Override  
    public void handle(Event t) {  
        //这里所以菜单是共用的同一个tooltip  
        if (tooltip != null) {  
            tooltip.hide();  
        }  
    }  
});

三、一些相关的网址

http://stackoverflow.com/questions/13927559/menuitem-tooltip-in-javafx2

http://stackoverflow.com/questions/11647080/how-to-properly-size-and-wrap-tooltips

https://javafx-jira.kenai.com/browse/RT-23720?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel

http://docs.oracle.com/javafx/2/ui_controls/tooltip.htm

http://docs.oracle.com/javafx/2/api/index.html

发表评论

邮箱地址不会被公开。 必填项已用*标注