GXT中TextArea的getSelectedTex()方法在IE下报错的解决方案。

    前两天在调用TextArea的getSelectedText()时总是报索引值越界的错误,让我很是纳闷...

    折腾了半天,搬开GXT源代码看。由于TextArea的getSelectedText()方法是从TextField方法继承而来.. so..  在TextField.java中翻getSelectedText()的实现。

 

   TextField中的getSelectedText()方法实现如下。

   

  /**
   * Returns the selected text.
   * 
   * @return the selected text
   */
  public String getSelectedText() {
    int start = getCursorPos(), length = getSelectionLength();
    return getRawValue().substring(start, start + length);
  }

  

   从此得知跟该方法有关的还有两个方法: getCursorPos()和getSelectionLength() 。。。

   那么错误肯定处在这两个方法上, 于是写了个Demo来分别测试这两个方法, 最后发现是getCursorPos()无法在IE下取得正确的数值。

   百般无奈之下,试了试GWT中的TextArea组件。。 惊奇的发现没有GXT中的错误。 取值很正确...

   最后想了一个解决方案, 重新创建一个TextArea组件,继承与GWT的TextArea.. 然后使用Ext中的样式即可..

   随后对Ext JS的TextArea组件的UI进行分析... 得出如下 css 样式设置:

      1. 普通状态: 采用 x-form-field  样式

      2. 获得焦点: 添加 x-form-focus 样式

      3. 失去交单: 移除 x-form-focus 样式即可

 

   具体代码如下:

  

import com.google.gwt.user.client.ui.FocusListener;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.Widget;


public class TransferTextArea extends TextArea {

	public TransferTextArea() {
		this.setStyleName("x-form-field");
		final TransferTextArea instance = this;
		
		this.addFocusListener(new FocusListener() {

			public void onFocus(Widget sender) {
				instance.addStyleName("x-form-focus");
			}

			public void onLostFocus(Widget sender) {
				instance.removeStyleName("x-form-focus");
			}			
		});
		
	}		
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值