3

複数の列を含む CellTable で行を選択すると、行全体が黄色になります。クリックする行の領域 (行のどの列) にも依存しません。

私がやろうとしているのは、このテーブルの他の行が選択されていない限り、選択した行を黄色に保つことです。現時点では、ブラウザの別の場所をクリックするとすぐに、行が元の色に戻ります。

選択モデルを使用しようとしましたが、何も変わりませんでした。フォーカスはブラウザによって管理されているため、アドバイスはありますか、それとも単に不可能ですか? 動作は、CellTable の Google ショーケースでも同じです...

4

5 に答える 5

1

user905374 の解決策は実際に機能しました。最初の投稿で、既に a を使用して解決策を試しましたが、selectionModelうまくいかなかったと述べました。これは部分的に真実でした。機能しますが、テーブルにCheckboxCell.

動作する例と動作しない例に従います。これはバグかもしれないと思いますが、何か見落としがあるかどうかはわかりません。

    final CellTable<LicenceDto> licenseTable = new CellTable<LicenceDto>();
    final SingleSelectionModel<LicenceDto> selectionModel = new SingleSelectionModel<LicenceDto>();
    licenseTable.setSelectionModel(selectionModel);

    //--- If I add this column, the selection does work.
    Column<LicenceDto, String> workingColumn = new Column<LicenceDto, String>(new TextCell()) {

        @Override
        public String getValue(LicenceDto object) {
            return "Works";
        }
    };
    workingColumn.setFieldUpdater(new FieldUpdater<LicenceDto, String>() {

        @Override
        public void update(int index, LicenceDto object, String value) {
            ;
        }
    });
    licenseTable.addColumn(workingColumn);


    //--- If I add this column, the selection does NOT work anymore.
    Column<LicenceDto, Boolean> notWorkingColumn = new Column<LicenceDto, Boolean>(new CheckboxCell(true, true)) {

        @Override
        public Boolean getValue(LicenceDto object) {
            return object.getEnabled();
        }
    };
    notWorkingColumn.setFieldUpdater(new FieldUpdater<LicenceDto, Boolean>() {

        @Override
        public void update(int index, LicenceDto object, Boolean value) {
            presenter.enableLicense(object, value);
        }
    });
    licenseTable.addColumn(notWorkingColumn);

複数のセルを組み合わせてテーブルに追加することもできます (例LinkActionCellなど)。がない限りCheckboxCell、 の青の選択SingleSelectionModelは魅力のように機能します。これで私が間違っていることを誰かが見ていますか、CheckboxCellそれともバグがありますか?


アップデート

単なる私の使い方ミスでした。問題は、何も処理しないと思っていても(コンストラクターの 2 番目のパラメーター) に設定handlesSelectionしたことです。に設定すると問題が解決します。trueCheckboxCellfalse

結論:自分で選択を処理しない場合は、選択モデル (例: SingleSelectionModel) を使用し、コンストラクターのhandlesSelectionパラメーターを true に設定しないでください。trueCheckboxCell

于 2013-02-14T15:03:20.990 に答える
1

選択モデルは、実際にやりたいことを実行します。つまり、行を青く塗りつぶし、ページ内の他の場所をクリックしても行の色は変わりません。(別の行が選択されている場合のみ)

2 つの選択モデルがあります。1 つの行のみを選択できるモデルと、複数の行を選択できる別のモデルです。

MultiSelectionModel<Row> selectionModel = new MultiSelectionModel<Row>();
table.setSelectionModel(selectionModel);

SingleSelectionModel<Row> selectionModel = new SingleSelectionModel<Row>();
table.setSelectionModel(selectionModel);
于 2013-02-13T18:05:59.573 に答える
0

Showcase のデモをもう一度見てください。今回は、一番左の列、つまり最初の列のチェックボックスを使用します。On selection the row turns blue行の選択が行われたことを示します。これは、SelectionModel をセットアップしたときです。ページの CellTable/DataGrid 以外の場所をクリックしますselection is not changed

ここで、最初の列からチェックボックスを介して行を選択する代わりに、他の列の行をクリックします。行が黄色に変わります。ページの CellTable/DataGrid 以外の場所をクリックしますfocus/yellow is lost

黄色の色」は、行がフォーカスされており、編集中であり、選択されていないことを示します。

注 -セルごとのクリック イベントを使用して行を強制的に選択できます。

于 2013-02-13T18:30:04.350 に答える
0

次のようなことを試してください:

CellTable table;
YourDataObject object = new YourDataObject(...);
SingleSelectionModel<YourDataObject> selectionModel = 
                                     new SingleSelectionModel<YourDataObject>();
table.setSelectionModel(selectionModel);
...
table.setSelected(object, true);

MultiSelectionModel複数の行を強調表示する場合に使用します。

于 2013-02-14T09:31:49.160 に答える
0

選択した行のインデックスを保存します。ユーザーが行を選択すると、行のスタイルをケースに適した「選択されたスタイル」(css ファイルで定義) に変更し、選択したスタイルを以前に選択した行から削除します。また、選択した行のインデックスを更新することを忘れないでください。

元のバージョンのコードを提供していただければ、喜んでコードの作成をお手伝いします。

于 2013-02-14T11:36:25.613 に答える