0
次のコードを使用して、ネーバーブルを作成し、設定によって編集機能を登録します。なぜこのテーブルのセルを編集できないのですか?私のネイバーブルを編集できない理由
public class NattableFactory {
public static Control createExampleControl(Composite parent) {
ColumnGroupModel columnGroupModel = new ColumnGroupModel();
ColumnHeaderLayer columnHeaderLayer;
parent.setLayout(new GridLayout());
// property names of the Person class
String[] propertyNames = { "firstName", "lastName", "gender", "married", "birthday", "street", "status" };
// mapping from property to label, needed for column header labels
Map<String, String> propertyToLabelMap = new HashMap<String, String>();
propertyToLabelMap.put("firstName", "Firstname");
propertyToLabelMap.put("lastName", "Lastname");
propertyToLabelMap.put("gender", "Gender");
propertyToLabelMap.put("married", "Married");
propertyToLabelMap.put("birthday", "Birthday");
propertyToLabelMap.put("street", "Street");
propertyToLabelMap.put("status", "Status");
// Body
DefaultBodyDataProvider<Person> bodyDataProvider = new DefaultBodyDataProvider<Person>(PersonService.getPersons(50),
propertyNames);
ColumnGroupBodyLayerStack bodyLayer = new ColumnGroupBodyLayerStack(new DataLayer(bodyDataProvider),
columnGroupModel);
// Column header
DefaultColumnHeaderDataProvider defaultColumnHeaderDataProvider = new DefaultColumnHeaderDataProvider(propertyNames,
propertyToLabelMap);
DefaultColumnHeaderDataLayer columnHeaderDataLayer = new DefaultColumnHeaderDataLayer(
defaultColumnHeaderDataProvider);
columnHeaderLayer = new ColumnHeaderLayer(columnHeaderDataLayer, bodyLayer, bodyLayer.getSelectionLayer());
ColumnGroupHeaderLayer columnGroupHeaderLayer = new ColumnGroupHeaderLayer(columnHeaderLayer,
bodyLayer.getSelectionLayer(), columnGroupModel);
columnGroupHeaderLayer.addColumnsIndexesToGroup("name", 0, 1);
columnGroupModel.getColumnGroupByIndex(0).setCollapseable(false);
columnGroupHeaderLayer.setGroupUnbreakable(0);
CompositeLayer compositeLayer = new CompositeLayer(1, 2);
compositeLayer.setChildLayer(GridRegion.COLUMN_HEADER, columnGroupHeaderLayer, 0, 0);
compositeLayer.setChildLayer(GridRegion.BODY, bodyLayer, 0, 1);
// register column label accumulator
final ColumnOverrideLabelAccumulator columnLabelAccumulator = new ColumnOverrideLabelAccumulator(bodyLayer);
bodyLayer.setConfigLabelAccumulator(columnLabelAccumulator);
columnLabelAccumulator.registerColumnOverrides(5, "street");
columnLabelAccumulator.registerColumnOverrides(2, "gender");
// Register create column group command handler
// Register column chooser
DisplayColumnChooserCommandHandler columnChooserCommandHandler = new DisplayColumnChooserCommandHandler(
bodyLayer.getSelectionLayer(), bodyLayer.getColumnHideShowLayer(), columnHeaderLayer, columnHeaderDataLayer,
columnGroupHeaderLayer, columnGroupModel);
bodyLayer.registerCommandHandler(columnChooserCommandHandler);
NatTable natTable = new NatTable(parent, compositeLayer, false);
natTable.addConfiguration(new DefaultNatTableStyleConfiguration());
natTable.addConfiguration(new EditorConfiguration());
natTable.addConfiguration(new DefaultColumnHeaderStyleConfiguration());
natTable.addConfiguration(new DefaultSelectionStyleConfiguration());
GridDataFactory.fillDefaults().grab(true, true).applyTo(natTable);
natTable.configure();
return natTable;
}
}
class EditorConfiguration extends AbstractRegistryConfiguration {
@Override
public void configureRegistry(IConfigRegistry configRegistry) {
configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITABLE_RULE, IEditableRule.ALWAYS_EDITABLE);
registerEditors(configRegistry);
}
private void registerEditors(IConfigRegistry configRegistry) {
registerColumnStreetComboBox(configRegistry);
registerColumnGenderIcon(configRegistry);
}
private static void registerColumnStreetComboBox(IConfigRegistry configRegistry) {
// register a combobox editor for the street names
ComboBoxCellEditor comboBoxCellEditor = new ComboBoxCellEditor(Arrays.asList(PersonService.getStreetNames()));
configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITOR, comboBoxCellEditor, DisplayMode.NORMAL,
"street");
}
/**
* The following will register a CheckBoxCellEditor with custom icons for the column that carries the gender
* information. As a Gender is not a Boolean, there need to be a special converter registered. Note that such a
* converter needs to create a Boolean display value and create the canonical value out of a Boolean value again.
*
* To register a CheckBoxCellEditor, you need to
*
*
*
* 1.Register the editor
*
* 2.Register the painter corresponding to that editor
*
* 3.Register the needed converter
*
*
*
* @param configRegistry
*/
private void registerColumnGenderIcon(IConfigRegistry configRegistry) {
// register a CheckBoxCellEditor for column four
configRegistry.registerConfigAttribute(EditConfigAttributes.CELL_EDITOR, new CheckBoxCellEditor(),
DisplayMode.NORMAL, "gender");
// if you want to use the CheckBoxCellEditor, you should also consider
// using the corresponding CheckBoxPainter to show the content like a
// checkbox in your NatTable
// in this case we use different icons to show how this works
configRegistry.registerConfigAttribute(CellConfigAttributes.CELL_PAINTER,
new CheckBoxPainter(GUIHelper.getImage("arrow_up"), GUIHelper.getImage("arrow_down")), DisplayMode.NORMAL,
"gender");
// using a CheckBoxCellEditor also needs a Boolean conversion to work
// correctly
configRegistry.registerConfigAttribute(CellConfigAttributes.DISPLAY_CONVERTER, getGenderBooleanConverter(),
DisplayMode.NORMAL, "gender");
}
/**
* @return Returns a simple converter for the gender of a Person. {@link Gender#MALE} will be interpreted as true
* while {@link Gender#FEMALE} will be interpreted as false
*/
private IDisplayConverter getGenderBooleanConverter() {
return new DisplayConverter() {
@Override
public Object canonicalToDisplayValue(Object canonicalValue) {
if (canonicalValue instanceof Gender) {
return ((Gender) canonicalValue) == Gender.MALE;
}
return null;
}
@Override
public Object displayToCanonicalValue(Object displayValue) {
Boolean displayBoolean = Boolean.valueOf(displayValue.toString());
return displayBoolean ? Gender.MALE : Gender.FEMALE;
}
};
}
}
あなたは私がして、編集機能を登録見ることができます "natTable.addConfiguration(新EditorConfiguration());"私は列2(性別)と5(ストリート)を意味します
これはあなたの質問にお答えしますか? – SomeDude
はい。私はちょうど解決策を見つけました。 – truejasonxiefans