2

textinputcell を編集する場合、通常は 2 回のクリックが必要です。最初のクリックでセルにフォーカスが移動し、次に入力にフォーカスが移動します。

20 列のセルテーブルがあり、すべて textinputcell - Excel スタイルです。そして、この問題により、完全に使用できなくなります。

コードサンプルは次のとおりです。

FieldUpdater<MyBean, String> fieldUpdater = new FieldUpdater<MyBean, String>() {
  @Override
  public void update(int index, MyBean object, String value) {
    object.setValue(value);
  }
};

Column<MyBean, String> column = new Column<MyBean, String>(new TextInputCell()) {
  @Override
  public String getValue(MyBean object) {
    return objet.getValue();
  }
};

column.setFieldUpdater(fieldUpdater);
table.addColumn(column, "Col");

問題に直面しなければなりませんでしたか?知っている解決策はありますか?

ありがとう

4

3 に答える 3

-1

グリッドの selectionModel が行ではなくセルに設定されているかどうかを確認します。それはあなたの問題を解決するかもしれません。

于 2013-10-11T14:26:57.443 に答える
-1

よし、これが私がやったことです: EditTextCell がフォーカスを変更するのに 2 回のクリックを必要としないことに気付きました

だから私はクラスを複製し(すべてのプライベート:/)、メソッドrenderに次の変更を加えました:

前 :

if (viewData != null) {
  String text = viewData.getText();
  if (viewData.isEditing()) {
    /*
     * Do not use the renderer in edit mode because the value of a text
     * input element is always treated as text. SafeHtml isn't valid in the
     * context of the value attribute.
     */
    sb.append(template.input(text));
  } else {
    // The user pressed enter, but view data still exists.
    sb.append(renderer.render(text));
  }
} else if (value != null) {
  sb.append(renderer.render(value));
}

後 :

    if (viewData != null) {
        String text = viewData.getText();
        sb.append(template.input(text));
    }
    else if (value != null) {
        sb.append(template.input(value));
    }

私はテンプレートのみを使用しており、 rendererは使用していません。

ボーナス : セルの独自のコピーを使用しているため、テンプレートを編集できます。幅(コンストラクター引数)を追加しました:

interface Template extends SafeHtmlTemplates {
    @Template("<input type=\"text\" value=\"{0}\" style=\"width:{1}px\" tabindex=\"-1\"></input>")
    SafeHtml input(String value, String width);
}

そして、私はこのようにテンプレートを呼び出します:sb.append(template.input(text, width));

それが役立つことを願っています:)

于 2012-10-16T14:15:51.660 に答える