Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NatTable with checkbox列-选中/取消选中not working_Java_Eclipse_Checkbox_Swt_Nattable - Fatal编程技术网

Java NatTable with checkbox列-选中/取消选中not working

Java NatTable with checkbox列-选中/取消选中not working,java,eclipse,checkbox,swt,nattable,Java,Eclipse,Checkbox,Swt,Nattable,使用EditableGrid示例在我的NatTable中创建了一个复选框列,但是要选中和取消选中的鼠标事件不会被触发,因此复选框的状态不会改变。下面是代码片段: private Control exampleNatTableWithCheckBox(Composite parent) { final String[] propertyNames = PLAN_PROPERTY_NAMES; final Map<String, String> prop

使用EditableGrid示例在我的NatTable中创建了一个复选框列,但是要选中和取消选中的鼠标事件不会被触发,因此复选框的状态不会改变。下面是代码片段:

private Control exampleNatTableWithCheckBox(Composite parent) {

        final String[] propertyNames = PLAN_PROPERTY_NAMES;
        final Map<String, String> propertyToLabelMap = getPropertyToLabelMap();

        IRowIdAccessor<ConsoleEntry> rowIdAccessor = new IRowIdAccessor<T>() {
            @Override
            public Serializable getRowId(T rowObject) {
                return rowObject.getRcdIdx();
            }
        };
        ConfigRegistry configRegistry = new ConfigRegistry();

        // Body
        this.baseEventList = getBaseEventList();
        FilterList<T> filterList = new FilterList<T>(baseEventList);
        SortedList<T> sortedList = new SortedList<T>(filterList, null);

        bodyLayer = new FullFeaturedBodyStackLayer<ConsoleEntry>(sortedList, rowIdAccessor, propertyNames,configRegistry);

        this.bodyDataProvider = bodyLayer.getBodyDataProvider();

        registerConfigCells(configRegistry);

        registerCheckBoxEditor(configRegistry);

        // Column header
        FullFeaturedColumnHeaderLayerStack<T> columnHeaderLayer = new FullFeaturedColumnHeaderLayerStack<T>(sortedList, filterList, propertyNames, propertyToLabelMap, bodyLayer, bodyLayer.getSelectionLayer(),
                configRegistry);

        // Row header
        final DefaultRowHeaderDataProvider rowHeaderDataProvider = new DefaultSummaryRowHeaderDataProvider(
                this.bodyDataProvider);
        DefaultRowHeaderDataLayer rowHeaderDataLayer = new DefaultRowHeaderDataLayer(rowHeaderDataProvider);
        rowHeaderDataLayer.setDefaultColumnWidth(50);
        ILayer rowHeaderLayer = new RowHeaderLayer(rowHeaderDataLayer, bodyLayer, bodyLayer.getSelectionLayer());

        // Corner
        final DefaultCornerDataProvider cornerDataProvider = new DefaultCornerDataProvider(
                columnHeaderLayer.getColumnHeaderDataProvider(), rowHeaderDataProvider);
        DataLayer cornerDataLayer = new DataLayer(cornerDataProvider);
        ILayer cornerLayer = new CornerLayer(cornerDataLayer, rowHeaderLayer, columnHeaderLayer);

        // Grid
        GridLayer gridLayer = new GridLayer(bodyLayer, columnHeaderLayer, rowHeaderLayer, cornerLayer);

        this.natTable = new NatTable(parent, gridLayer, false);

        this.natTable.setConfigRegistry(configRegistry);

        this.natTable.addConfiguration(new StyledRowHeaderConfiguration());
        this.natTable.addConfiguration(new StyledColumnHeaderConfiguration());
        this.natTable.addConfiguration(new DefaultNatTableStyleConfiguration());

        // Popup menu
        this.natTable.addConfiguration(new HeaderMenuConfiguration(this.natTable) {
            @Override
            protected PopupMenuBuilder createColumnHeaderMenu(NatTable natTable) {
                return super.createColumnHeaderMenu(natTable).withColumnChooserMenuItem();
            }
        });

        this.natTable.addConfiguration(new SingleClickSortConfiguration());

        // Editing
        ColumnOverrideLabelAccumulator columnLabelAccumulator = new ColumnOverrideLabelAccumulator(
                bodyLayer.getBodyDataLayer());
        bodyLayer.getBodyDataLayer().setConfigLabelAccumulator(columnLabelAccumulator);
        columnLabelAccumulator.registerColumnOverrides(0, COLUMN_BOOKMARK_LABEL);

        this.natTable.addConfiguration(editableGridConfiguration(columnLabelAccumulator, this.bodyDataProvider));
        this.natTable.addConfiguration(filterRowConfiguration());

        bodyLayer.getBodyDataLayer().setConfigLabelAccumulator(getConfigLabelAccumulator(bodyLayer.getBodyDataLayer()));

        // Preserve selection on updates and sort
        final SelectionLayer selectionLayer = bodyLayer.getSelectionLayer();
        final RowSelectionModel<ConsoleEntry> rowSelectionModel = new RowSelectionModel<ConsoleEntry>(selectionLayer,
                this.bodyDataProvider, rowIdAccessor);
        selectionLayer.setSelectionModel(rowSelectionModel);

        // Select complete rows
        RowOnlySelectionConfiguration<ConsoleEntry> selectionConfig = new RowOnlySelectionConfiguration<ConsoleEntry>();
        selectionLayer.addConfiguration(selectionConfig);
//      this.natTable.addConfiguration(new RowOnlySelectionBindings());

         rowSelectionProviderNatTable = new RowSelectionProvider<ConsoleEntry>(selectionLayer,
                this.bodyDataProvider);
        if (this.bodyDataProvider.getList() != null && this.bodyDataProvider.getList().size() > 0) {
            rowSelectionProviderNatTable.setSelection(new StructuredSelection(this.bodyDataProvider.getList().get(0)));
        }

        LayerListenerFixture listener = new LayerListenerFixture();
        // we register the listener to the SelectionLayer because for some cases
        // like clearing a collection, the selection change is not propagated
        // the layer stack upwards as it gets stopped on layer conversion
        selectionLayer.addLayerListener(listener);

        // Column chooser
        DisplayColumnChooserCommandHandler columnChooserCommandHandler = new DisplayColumnChooserCommandHandler(
                selectionLayer, bodyLayer.getColumnHideShowLayer(), columnHeaderLayer.getColumnHeaderLayer(),
                columnHeaderLayer.getColumnHeaderDataLayer(), null, null);
        bodyLayer.registerCommandHandler(columnChooserCommandHandler);

        this.natTable.configure();

        return this.natTable;
    }

我已经完成了与示例代码类似的所有设置,但是触发鼠标事件不起作用。非常感谢您的指点和帮助。TIA.

代码片段在某种程度上不一致。您发布的RegisterCheckBox编辑器方法不是您正在调用的方法。参数列表不匹配。假设我的代码是可编译的。我通过调试发现AbstractCellEditor->activateCell()->调用了UpdateDataCommand,并最终调用了CheckBoxCellEditor->createEditorControl()。问题是canvas.addMouseListener(new MouseAdapter(){@Override public void mouseUp(MouseEvent e){CheckBoxCellEditor.this.checked=!CheckBoxCellEditor.this.checked;canvas.redraw();});从来没有人打过电话。关于如何确保调用canvas.redraw()的任何指针??TIA是否可能已为DisplayMode注册了displayconverter。请选择覆盖为DisplayMode注册的转换器的选项。正常?感谢您的快速回复。我使用了示例代码,减少了使用DefaultGridLayer创建NatTable的层,并设置了DefaultNatTableStyleConfiguration和RegisterCheckBox编辑器(configRegistry)的最小配置。但仍然无法更改复选框选择。我找不到问题的根源。如果您能解释如何使此基本功能正常工作,将不胜感激。或者检查示例。不知道在不深入代码细节的情况下我还应该说些什么
private void registerCheckBoxEditor(IConfigRegistry configRegistry) {

        // make checkbox cells editable
        configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITABLE_RULE, IEditableRule.ALWAYS_EDITABLE,
                DisplayMode.EDIT, COLUMN_BOOKMARK_LABEL);

        configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITOR, new CheckBoxCellEditor(),
                DisplayMode.NORMAL, COLUMN_BOOKMARK_LABEL);

        final CheckBoxPainter checkBoxCellPainter = new CheckBoxPainter();

        configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_PAINTER, checkBoxCellPainter,
                DisplayMode.NORMAL, COLUMN_BOOKMARK_LABEL);

        configRegistry.registerConfigAttribute(CellConfigAttributes.DISPLAY_CONVERTER,
                new DefaultBooleanDisplayConverter(), DisplayMode.NORMAL, COLUMN_BOOKMARK_LABEL);
    }

public AbstractRegistryConfiguration editableGridConfiguration(
            final ColumnOverrideLabelAccumulator columnLabelAccumulator, final IDataProvider dataProvider) {

        return new AbstractRegistryConfiguration() {

            @Override
            public void configureRegistry(IConfigRegistry configRegistry) {

                columnLabelAccumulator.registerColumnOverrides(0, COLUMN_BOOKMARK_LABEL);

                registerCheckBoxEditor(configRegistry, new CheckBoxPainter(), new CheckBoxCellEditor());

                configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITABLE_RULE,
                        IEditableRule.ALWAYS_EDITABLE, DisplayMode.EDIT, COLUMN_BOOKMARK_LABEL);
            }

        };
    }