我刚刚开始研究Gwt2.0。我这里有两个文本框。两者都执行相同的事件操作。使用
addFocusListener()
我现在拥有的是。
areaBox.addFocusListener(new FocusListener(){
@Override
@Deprecated
public void onFocus(Widget arg0) {
// TODO Auto-generated method stub
areaBox.setTitle("Area");
}
@Override
public void onLostFocus(Widget arg0) {
if(areaBox.getText().length() >= 4 )
{
areaBox.setStyleName("gwt-TextBox-Success");
}
else
{
areaBox.setStyleName("gwt-TextBox-Error");
cityBox.setText("Enter Area Name ");
areaBox.addFocusListener(new FocusListener(){
@Override
@Deprecated
public void onFocus(Widget arg0) {
areaBox.setText(null);
areaBox.setStyleName("gwt-TextBox-AE");
}
@Override
@Deprecated
public void onLostFocus(Widget arg0) {
}
});
}
}
});
cityBox.addFocusListener(new FocusListener(){
@Override
@Deprecated
public void onFocus(Widget arg0) {
cityBox.setTitle("City");
}
@Override
public void onLostFocus(Widget arg0) {
if(cityBox.getText().length() >= 4 )
{
cityBox.setStyleName("gwt-TextBox-Success");
}
else
{
cityBox.setStyleName("gwt-TextBox-Error");
cityBox.setText("Enter City Name ");
cityBox.addFocusListener(new FocusListener(){
@Override
@Deprecated
public void onFocus(Widget arg0) {
cityBox.setText(null);
cityBox.setStyleName("gwt-TextBox-AE");
}
@Override
@Deprecated
public void onLostFocus(Widget arg0) {
// TODO Auto-generated method stub
}
});
}
}
});
代码的作用是什么。当聚焦于区域文本框时,会出现工具提示,显示要输入的内容。当Focus on它丢失或进入下一个文本框,例如City TextBox时,它会检查输入的字符串是否大于4个字符。如果是,则如果不应用ERROR css样式,则将SUCCESS css样式应用于该框。因此,当再次单击它(AreaBox)时,文本被清除并且css样式被重置。
以上是2个文本框之间的示例。 请帮帮我,我有近10个这样的字段,我想尽量减少代码。 我正在考虑使用集合或自定义小部件。但不知道从哪里开始。需要你的帮助和意见。感谢...
答案 0 :(得分:0)
以下是我将如何解决这个问题:
areaBox.addFocusListener(generateFocusListener("Area", "Enter Area Name "));
cityBox.addFocusListener(generateFocusListener("City", "Enter City Name "));
FocusListener generateFocusListener(final String title, final String text) {
return new FocusListener(){
@Override
@Deprecated
public void onFocus(Widget widget) {
// initial focus happens here
TextBox box = (TextBox) widget;
box.setTitle(title);
}
@Override
public void onLostFocus(Widget widget) {
// Focus is lost for the first time
TextBox box = (TextBox) widget;
if(box.getText().length() >= 4 )
{
box.setStyleName("gwt-TextBox-Success");
// Change focus listener so that now once pressed it resets
box.addFocusListener(new FocusListener(){
@Override
@Deprecated
public void onFocus(Widget widget) {
TextBox box = (TextBox) widget;
box.setText(null);
box.setStyleName("gwt-TextBox-AE");
}
@Override
@Deprecated
public void onLostFocus(Widget widget) {
TextBox box = (TextBox) widget;
if(box.getText().length() >= 4 )
{
box.setStyleName("gwt-TextBox-Success");
}
else
{
box.setStyleName("gwt-TextBox-Error");
box.setText(text);
}
}
});
}
else
{
box.setStyleName("gwt-TextBox-Error");
box.setText(text);
}
}
};
}