0

がありCellTable、キーボード選択ポリシーを に設定したいと考えていKeyboardSelectionPolicy.BOUND_TO_SELECTIONます。ただし、最初の行の aTextCellを最初にクリックしても、期待どおりに行が完全に選択されないようです。説明のために、これは次のようになります ここに画像の説明を入力 : ここに画像の説明を入力

以降のすべてのクリックは、キーボード ナビゲーションと同様に、期待どおりに行を選択します。さらに、最初のクリックがNumberCell、またはTextCell他の行の である場合、選択は期待どおりに機能します。TextCellこの問題は、最初の行のa を最初にクリックしたときにのみ現れます。

再現するには、次のサンプル コードを検討してください。

public class WebApp implements EntryPoint {

    private static class Model {
        private final int num;
        private final String name;
        public Model(String name, int num) {
            super();
            this.name = name;
            this.num = num;
        }
        public String getName() {
            return name;
        }
        public int getNum() {
            return num;
        }
    }

    @Override
    public void onModuleLoad() {

        final CellTable<Model> table = new CellTable<Model>();
        table.setWidth("100%", true);  // Truncate cell contents as needed.

        // Causes bug on first row first click TextCell selection.
        table.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.BOUND_TO_SELECTION);

        // Add a column to show the name.
        TextCell textCell = new TextCell() {
            @Override
            public Set<String> getConsumedEvents() {
                return Sets.newHashSet(BrowserEvents.CLICK);
            }
        };
        Column<Model, String> termColumn = new Column<Model, String>(new TextCell()) {
            @Override
            public String getValue(Model entry) {
                return entry.getName();
            }
        };
        termColumn.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
        table.addColumn(termColumn);

        // Add a column to show the num.
        Column<Model, Number> numberColumn = new Column<Model, Number>(new NumberCell()) {
            @Override
            public Number getValue(Model object) {
                return object.getNum();
            }
        };
        numberColumn.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
        table.addColumn(numberColumn);

        // Add a selection model to handle user selection.
        final SingleSelectionModel<Model> selectionModel = new SingleSelectionModel<Model>();
        table.setSelectionModel(selectionModel);

        // Data.
        ArrayList<Model> entries = buildEntries();

        // Set the total row count. This isn't strictly necessary, but it affects
        // paging calculations, so its good habit to keep the row count up to date.
        table.setRowCount(entries.size(), true);

        // Push the data into the widget.
        table.setRowData(0, entries);

        // Add it to the root panel.
        RootLayoutPanel rootLayoutPanel = RootLayoutPanel.get();
        rootLayoutPanel.getElement().getStyle().setWidth(50, Unit.PCT);
        rootLayoutPanel.getElement().getStyle().setHeight(50, Unit.PCT);
        rootLayoutPanel.getElement().getStyle().setProperty("margin", "auto");
        rootLayoutPanel.add(table);
    }

    private ArrayList<Model> buildEntries() {
        ArrayList<Model> l = Lists.newArrayList();

        for (int i = 0; i < 10; ++i) {
            l.add(buildEntry());
        }

        return l;
    }

    private int currNum = 0;
    private char currChar = 'a' - 1;
    private Model buildEntry() {
        int num = currNum++;
        String term = Character.toString(++currChar);
        for (int i = 0; i < 25; i++) {
            term += currChar;
        }
        return new Model(term, num);
    }
}

これは、Chrome、FF、IE で発生します。どんな助けでも大歓迎です、ありがとう。

4

0 に答える 0