0

ユーザーが数値を入力できるページにいくつかのテキストボックスがあります。0.0ただし、試してみると、これらのテキスト ボックスにデフォルト値を入力することはできません。具体的には、ページの読み込み時に両方に表示したいと考えています。

これが私がそれらを作成する方法と私が試したことです-

GroupSection engineering_group = new GroupSection();
KSTextBox engrDesignTextBox  = new KSTextBox();
engrDesignTextBox.setWidth("2.875em");
//engrDesignTextBox.setWatermarkText("0.0"); ==> this works, but not what I need
//engrDesignTextBox.setText("0.0"); ==> this doesn't work
engrDesignTextBox.setValue("0.0"); // doesn't work either

KSTextBox engrScienceTextBox = new KSTextBox();
engrScienceTextBox.setWidth("2.875em");
//engrScienceTextBox.setWatermarkText("0.0"); ==> this works, but not what I need
//engrScienceTextBox.setText("0.0"); ==> this doesn't work
engrScienceTextBox.setValue("0.0"); // doesn't work either

「onload」イベントリスナーをアタッチして、そこでsetTextを試す必要があると思いますか? それはかなり単純であるべきものにとってはやり過ぎのようです。

ちなみに、両方のテキスト ボックスに onBlurHandlers をアタッチしましたが、期待どおりに動作します (以下のコードを参照)。

次のコードは0.0、ユーザーがテキスト ボックスが空のときにテキスト ボックスをクリックまたはタブで移動すると、単純に挿入されます。

engrDesignTextBox.addBlurHandler(new BlurHandler() {
   @Override
   public void onBlur(BlurEvent blurEvent) {
      if(((KSTextBox)blurEvent.getSource()).getText().length() < 1) {
         ((KSTextBox)blurEvent.getSource()).setText("0.0");
      }
   }
});
engrScienceTextBox.addBlurHandler(new BlurHandler() {
   @Override
   public void onBlur(BlurEvent blurEvent) {
     if(((KSTextBox)blurEvent.getSource()).getText().length() < 1) {
       ((KSTextBox)blurEvent.getSource()).setText("0.0");
     }
   }
});

編集:ここで要求されているのは、KSTextBox で setText および setValue メソッドを定義した方法です。

public class KSTextBox extends TextBox implements HasWatermark {
  .
  .
  . 

  @Override
  public void setText(String text) {
    String oldValue = super.getText();
    if(hasWatermark) {
      if(text == null || (text != null && text.isEmpty())){
        super.setText(watermarkText);
        addStyleName("watermark-text");
        watermarkShowing = true;
      }
      else{
        super.setText(text);
        removeStyleName("watermark-text");
        watermarkShowing = false;
      }
    }
    else{
      super.setText(text);
    }
    ValueChangeEvent.fireIfNotEqual(this, oldValue, text);
  }

  @Override
  public void setValue(String value) {
    if(hasWatermark) {
      if(value == null || (value != null && value.isEmpty())){
        super.setValue(watermarkText);
        addStyleName("watermark-text");
        watermarkShowing = true;
      }
      else{
        super.setValue(value);
        removeStyleName("watermark-text");
        watermarkShowing = false;
      }
    }
    else{
      super.setValue(value);
    }
  }

元の質問に戻りますが、これらのテキスト ボックスの値を最初に に設定するにはどうすればよい0.0ですか?

4

1 に答える 1

0

それはうまくいったはずです.その非常に驚くべき.
setText または setValue を実行した後に、他のコードが値をリセットしている可能性はありますか?
ホストされたモードでデバッグしてみてください.setTextにブレークポイントを置き、いつ、何回呼び出されるかを確認してください

于 2013-02-14T19:03:58.790 に答える