Flex 自定义Tooltip 显示<s:datagrid>只显示行长标题的Tooltip

本文介绍如何在Flex中使用Halo主题时自定义DataGrid的提示信息,通过创建和销毁ToolTip来改变字体大小和样式。

效果图:

这样的效果,之前我使用Flex4.5 Spark主题的时候,可以直接显示出来。原理很简单,

<s:DataGrid id="myadDG12" x="0" y="0" width="100%" height="100%"					dataProvider="{report_disasterInfo}"
	horizontalScrollPolicy="on" fontFamily="宋体" fontSize="12" 
	gridRollOver="myadDG2_itemRollOverHandler(event)"
	gridRollOut="myadDG12_gridRollOutHandler(event)"
	rollOut="myadDG12_mouseOutHandler(event)">
<s:columns>
<s:ArrayList>
<s:GridColumn  dataField="address" headerText="地点" width="155" sortable="false"/>			
<s:GridColumn  dataField="type" headerText="灾害类型" width="80"sortable="false" />
<s:GridColumn  dataField="time" headerText="发灾时间" width="80"sortable="false" />
</s:ArrayList>
								
</s:columns>													
</s:DataGrid>
private function myadDG2_itemRollOverHandler(event:GridEvent):void
{
  myadDG12.toolTip="";
  myadDG12.toolTip = event.itemRenderer.label;							
}

就可显示出来了。

后来我成Halo主题后,上面那个方法出能显示出来。可貌似控件不了他显示的字体大小,无奈之下,就换个方法了,自定义。

import mx.managers.ToolTipManager;
public var myTip:ToolTip ; 
/** DataGrid重置Tooltip显示事件*/
            private function myadDG2_itemRollOverHandler(event:GridEvent):void
            {
                if(event.itemRenderer.label != "地点" && event.itemRenderer.label != "灾害类型" 
                    && event.itemRenderer.label != "发灾时间" ){
                    if(gridrow != event.rowIndex || gridcolumn != event.columnIndex || stoolTip == null){
                        if((gridrow != event.rowIndex && gridcolumn != event.columnIndex) 
                            || (gridrow == event.rowIndex && gridcolumn != event.columnIndex) 
                            || (gridrow != event.rowIndex && gridcolumn == event.columnIndex)){                            
                            if(myTip != null)
                                myTip.visible = false;                            
                        }
                        myTip = ToolTipManager.createToolTip(event.itemRenderer.label,event.stageX,(event.stageY+20)) as ToolTip;
                        myTip.setStyle("backgroundColor",0xf6f7c2);
                        myTip.setStyle("fontSize",13);
                        myTip.width = myTip.width * 1.3;
                        myTip.height = 28;
                        stoolTip = "";
                        
                    }
                    else{
                        myTip.x = event.stageX;
                        myTip.y = event.stageY+20;
                    }
                    
                    
                }else{
                    //stoolTip = null;
                    //if(myTip !=null)
                    //ToolTipManager.destroyToolTip(myTip);
                }
                gridrow = event.rowIndex;
                gridcolumn=event.columnIndex;
                
            }
删除破坏由 createToolTip() 方法创建的指定 ToolTip。
private function myadDG12_gridRollOutHandler(event:GridEvent):void
   {
             try{
                    if(myTip !=null)
                        ToolTipManager.destroyToolTip(myTip);
                }catch(e:Error){
                    
                }finally{
                    stoolTip= null;
                } 

   }
private function myadDG12_mouseOutHandler(event:MouseEvent):void
   {
             try{
                    if(myTip !=null)
                        ToolTipManager.destroyToolTip(myTip);
                }catch(e:Error){
                    
                }finally{
                    stoolTip= null;
                }
   }


 

### 将PrimeFaces Tooltip组件代码提取到单独的XHTML文件中并通过引入方式使用 在开发复杂的Web应用时,为了提高代码的可维护性和复用性,可以将某些组件的定义抽取到单独的XHTML文件中,并通过`<ui:include>`或其他引入方式在主页面中使用。以下是如何实现将PrimeFaces `tooltip`组件的代码提取到单独的XHTML文件中的方法[^1]。 #### 1. 创建单独的XHTML文件 首先,创建一个新的XHTML文件,例如`tooltipTemplate.xhtml`,并将`tooltip`的定义放入其中。以下是示例代码: ```xml <!-- tooltipTemplate.xhtml --> <p:tooltip id="customTooltip" for="targetComponent" value="This is a custom tooltip message" /> ``` 在此示例中,`for`属性指定了目标组件的ID,而`value`属性则定义了提示信息的内容。 #### 2. 在主页面中引入XHTML文件 接下来,在主页面中使用`<ui:include>`标签来引入上述定义的XHTML文件。可以通过参数传递动态设置`tooltip`的属性值。以下是主页面的示例代码: ```xml <!-- mainPage.xhtml --> <h:form> <h:outputText id="targetComponent" value="Hover over me!" styleClass="tooltipTarget" /> <!-- 引入tooltipTemplate.xhtml --> <ui:include src="tooltipTemplate.xhtml"> <ui:param name="for" value="targetComponent" /> <ui:param name="value" value="Dynamic tooltip message from main page." /> </ui:include> </h:form> ``` 在上述代码中,`<ui:include>`标签用于引入`tooltipTemplate.xhtml`文件,而`<ui:param>`标签则用于传递参数以动态调整`tooltip`的行为和外观。 #### 3. 使用EL表达式支持动态内容 如果需要更灵活地控制`tooltip`的内容,可以结合EL表达式(Expression Language)实现动态绑定。例如,在`tooltipTemplate.xhtml`中修改如下: ```xml <!-- tooltipTemplate.xhtml --> <p:tooltip id="customTooltip" for="#{for}" value="#{value}" /> ``` 这样,`for`和`value`属性就可以通过EL表达式从主页面传递过来。 #### 4. 注意事项 - 确保目标组件的ID与`tooltip`的`for`属性匹配,否则`tooltip`可能无法正确显示。 - 如果需要为多个组件提供不同的`tooltip`,可以通过循环或条件逻辑动态生成`<ui:include>`标签[^2]。 ```python # 示例:动态生成多个tooltip for component_id, tooltip_text in components.items(): print(f'<ui:include src="tooltipTemplate.xhtml">') print(f' <ui:param name="for" value="{component_id}" />') print(f' <ui:param name="value" value="{tooltip_text}" />') print(f'</ui:include>') ``` 通过这种方式,可以显著提高代码的复用性和可维护性,同时保持界面设计的灵活性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值