GWT CellTable将焦点放在选定的行上

时间:2013-02-13 10:42:02

标签: gwt focus celltable

当我在包含多个列的CellTable中选择一行时,整行会变成黄色。它不依赖于我单击的行的哪个区域(行的哪一列)。

我尝试做的是只要没有选择此表的其他行,就将所选行保持为黄色。目前,只要我点击浏览器中的其他位置,该行就会恢复原来的颜色。

我尝试使用选择模型,但这没有改变。您有任何建议或者这是不可能的,因为重点是由浏览器管理?在CellTable的Google展示中,行为是相同的......

5 个答案:

答案 0 :(得分:1)

选择模型实际上会执行您想要执行的操作:如果您单击页面中的其他位置,它会绘制一行蓝色并且行不会更改颜色。 (仅在选择了另一行时)

有两种选择型号: 一个允许您只选择一行,另一个允许您选择多行。

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

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

答案 1 :(得分:1)

user905374的解决方案确实有效。我在第一篇文章中提到,我已经尝试使用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做错了还是有错误?


<强>更新

这只是我的使用错误。问题是我将handlesSelection设置为trueCheckboxCell构造函数的第二个参数),即使我认为我没有处理任何事情。将其设置为false可以解决问题。

底线:使用选择模型(例如SingleSelectionModel)并且不要将handlesSelection构造函数的true参数设置为true,如果不这样做自己处理选择。

答案 2 :(得分:0)

您应该再次观看Showcase演示。这次使用最左边一列的复选框,即第一列。 On selection the row turns blue表示已进行行选择。这是您设置SelectionModel的时候。点击CellTable / DataGrid以外任何地方的页面 selection is not changed

现在,您不是从第一列中选​​择行复选框,而是单击任何其他列中的行。该行变黄。单击CellTable / DataGrid外的任何位置focus/yellow is lost

黄色”表示行处于焦点并正在编辑而未被选中。

注意 - 您可以通过使用每个单元格的点击事件来强制选择行。

答案 3 :(得分:0)

尝试这样的事情:

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

如果您希望突出显示多行,请使用MultiSelectionModel

答案 4 :(得分:0)

存储选定行的索引。当用户选择行时,将行的样式更改为适合您的案例(在您的css文件中定义)的某些“选定样式”,并从先前选定的行中删除所选样式。另外,不要忘记更新所选行的索引。

如果您提供原始版本的一些代码,我会愉快地为您提供一些代码。