Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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中的行选择_Java_Eclipse_Nattable - Fatal编程技术网

Java 列组标题的NatTable中的行选择

Java 列组标题的NatTable中的行选择,java,eclipse,nattable,Java,Eclipse,Nattable,我创建了一个Eclipse应用程序,在该应用程序中,我使用一个列标题实现了NatTable的行选择。行选择工作正常。后来,我在应用程序中添加了一个带有列组头的NatTable。问题来了,单击单元格后,行选择不起作用。仅选择单击的单元格 我在RowSelectionAction扩展了AbstractSelectionAction类中定义行选择RowSelectionAction对象是在类的重写configureBodyMouseClickBindings()方法中创建的扩展了DefaultSele

我创建了一个Eclipse应用程序,在该应用程序中,我使用一个列标题实现了NatTable的行选择。行选择工作正常。后来,我在应用程序中添加了一个带有列组头的NatTable。问题来了,单击单元格后,行选择不起作用。仅选择单击的单元格

我在
RowSelectionAction扩展了AbstractSelectionAction
类中定义行选择
RowSelectionAction
对象是在类的重写
configureBodyMouseClickBindings()
方法中创建的
扩展了DefaultSelectionBindings
。在
NatTable.configure()过程中调用此方法。但似乎在使用列groupd头创建的NatTable上没有调用
configureBodyMouseClickBindings()
方法

下面是创建具有简单列标题的NatTable的代码:

private NatTable createTable(Composite parent, List<TableLine> tLines, String[][] propertyNames,
  PropertyToLabels[] propToLabels, TableParams params, TextMatcherEditor<TableLine>editor) {

BodyLayerStack bodyLayerStack =
    new BodyLayerStack(
            tLines,
            new LineDataProviderColumnAccessor(propertyNames[0].length),
            params.getColumnIndicesForRowHeaders());

DataLayer bodyDataLayer = bodyLayerStack.getBodyDataLayer();
Integer[] rowHeights = params.getRowHeights();

if( rowHeights != null && rowHeights.length > 0 ) {
  for( int i = 0; i < rowHeights.length; i++ ) {
    if( rowHeights[i] != null )
      bodyDataLayer.setRowHeightByPosition(i, rowHeights[i]);
  }
}

Integer[] colWidths = params.getColumnWidths();
if( colWidths != null && colWidths.length > 0 ) {
  for( int i = 0; i < colWidths.length; i++ )
    if( colWidths[i] != null )
      bodyDataLayer.setColumnWidthByPosition(i, colWidths[i]);
}

IDataProvider columnHeaderDataProvider =
    new DefaultColumnHeaderDataProvider(propertyNames[0], propToLabels[0].getPropertyToLabels());
DataLayer columnHeaderDataLayer =
    new DefaultColumnHeaderDataLayer(columnHeaderDataProvider);

ILayer columnHeaderLayer =
    new ColumnHeaderLayer(
        columnHeaderDataLayer,
        bodyLayerStack,
        (SelectionLayer)null);

Integer[] hrHeights = params.getHeaderRowHeights();
if( hrHeights != null && hrHeights.length > 0 )
  columnHeaderDataLayer.setRowHeightByPosition(0, hrHeights[0]);

CompositeLayer composite = new CompositeLayer(1, 2);
composite.setChildLayer(GridRegion.COLUMN_HEADER, columnHeaderLayer, 0, 0);
composite.setChildLayer(GridRegion.BODY, bodyLayerStack, 0, 1);

NatTable natTable = new NatTable(parent, composite, false);
natTable.addConfiguration(new DefaultNatTableStyleConfiguration());
natTable.addConfiguration(new ContextMenuConfiguration(natTable));
natTable.addConfiguration(new AbstractRegistryConfiguration() {
  
  @Override
  public void configureRegistry(IConfigRegistry configRegistry) {
    Style cellStyle = new Style();
    cellStyle.setAttributeValue(
            CellStyleAttributes.BACKGROUND_COLOR,
            GUIHelper.COLOR_WIDGET_BACKGROUND);
    configRegistry.registerConfigAttribute(
            CellConfigAttributes.CELL_STYLE, cellStyle,
            DisplayMode.NORMAL, RowHeaderLabel);
  }
});
natTable.configure();

editor.setFilterator(new TextFilterator<TableLine>() {
  @Override
  public void getFilterStrings(List<String> baseList, TableLine element) {
    for( int i = 0; i < element.getLength(); i++ )
      baseList.add("" + element.getObjectByColumn(i));
  }
});
editor.setMode(TextMatcherEditor.REGULAR_EXPRESSION);
bodyLayerStack.getFilterList().setMatcherEditor(editor);

return natTable;}
private-NatTable-createTable(复合父级、列表行、字符串[][]属性名称、,
PropertyToLabels[]propToLabels,TableParams params,TextMatcherEditor){
BodyLayerStack BodyLayerStack=
新BodyLayerStack(
T线,
新的LineDataProviderColumnAccessor(propertyNames[0].length),
params.getColumnIndicatesForRowHeaders());
DataLayer bodyDataLayer=bodyLayerStack.getBodyDataLayer();
整数[]行高=params.getRowHeights();
如果(rowHeights!=null&&rowHeights.length>0){
对于(int i=0;i0){
for(int i=0;i0)
columnHeaderDataLayer.setRowHeightByPosition(0,hrHeights[0]);
复合层复合=新复合层(1,2);
setChildLayer(GridRegion.COLUMN_头,columnHeaderLayer,0,0);
复合.setChildLayer(GridRegion.BODY,bodyLayerStack,0,1);
NatTable NatTable=新的NatTable(父项、复合项、false);
addConfiguration(新的DefaultNatTableStyleConfiguration());
addConfiguration(新的ContextMenuConfiguration(natTable));
addConfiguration(新的AbstractRegistryConfiguration(){
@凌驾
公共无效配置注册表(IConfigRegistry configRegistry){
Style cellStyle=新样式();
cellStyle.setAttributeValue(
CellStyleAttributes.BACKGROUND\u颜色,
GUIHelper.COLOR\u WIDGET\u BACKGROUND);
configRegistry.registerConfigAttribute(
CellConfigAttributes.CELL\u样式,cellStyle,
DisplayMode.NORMAL,RowHeaderLabel);
}
});
configure();
editor.setFilterator(新的TextFilterator(){
@凌驾
public void getFilterString(列表基本列表、TableLine元素){
对于(int i=0;i
BodyLayerStack.class内容:

class BodyLayerStack extends AbstractLayerTransform {

private final FilterList<TableLine> filterList;
private final SelectionLayer selectionLayer;
private final DataLayer bodyDataLayer;
private final IRowDataProvider<TableLine> bodyDataProvider;

public DataLayer getBodyDataLayer() {
  return bodyDataLayer;
}

public SelectionLayer getSelectionLayer() {
  return selectionLayer;
}

public IRowDataProvider<TableLine> getBodyDataProvider() {
  return bodyDataProvider;
}

public BodyLayerStack(List<TableLine> values, IColumnAccessor<TableLine> columnAccessor, Integer[] columnIndicesForRowHeaders) {
    EventList<TableLine> eventList = GlazedLists.eventList(values);
    TransformedList<TableLine, TableLine> rowObjectsGlazedList = GlazedLists.threadSafeList(eventList);

    this.filterList = new FilterList<>(rowObjectsGlazedList);

    this.bodyDataProvider = new ListDataProvider<TableLine>(this.filterList, columnAccessor);
    bodyDataLayer = new DataLayer(this.bodyDataProvider);
    
    ColumnOverrideLabelAccumulator bodyLabelAccumulator = new ColumnOverrideLabelAccumulator(bodyDataLayer);
    bodyDataLayer.setConfigLabelAccumulator(bodyLabelAccumulator);

    if( columnIndicesForRowHeaders != null ) {
      for ( int i = 0; i < columnIndicesForRowHeaders.length; i++ ) {
        bodyLabelAccumulator.registerColumnOverrides(
            columnIndicesForRowHeaders[i],
            RowHeaderLabel);
      }
    }

    GlazedListsEventLayer<TableLine> glazedListsEventLayer =
            new GlazedListsEventLayer<>(bodyDataLayer, this.filterList);

    this.selectionLayer = new SelectionLayer(glazedListsEventLayer, false);
    selectionLayer.setSelectionModel(new RowSelectionModel<TableLine>(selectionLayer, this.bodyDataProvider, new IRowIdAccessor<TableLine>()
    {
      @Override
      public Serializable getRowId(TableLine line)
      {
        return line.getId();
      }
    }));

    selectionLayer.addConfiguration(new DefaultSelectionLayerConfiguration()
    {
      @Override
      protected void addSelectionUIBindings()
      {
        addConfiguration(new SelectionBindings());
      }

      @SuppressWarnings("rawtypes")
      @Override
      protected void addMoveSelectionConfig()
      {
        addConfiguration(new RowOnlySelectionConfiguration());
      }
    });

    ViewportLayer viewportLayer = new ViewportLayer(selectionLayer);
    setUnderlyingLayer(viewportLayer);
}

public FilterList<TableLine> getFilterList() {
    return this.filterList;
}
类BodyLayerStack扩展了AbstractLayerTransform{
私人最终筛选列表筛选列表;
私有最终选择层选择层;
私有最终数据层bodyDataLayer;
私有最终IRowDataProvider bodyDataProvider;
公共数据层getBodyDataLayer(){
返回数据层;
}
public SelectionLayer getSelectionLayer(){
返回selectionLayer;
}
公共IRowDataProvider getBodyDataProvider(){
返回bodyDataProvider;
}
public BodyLayerStack(列表值、IColumnAccessor columnAccessor、整型[]列表示行标题){
EventList EventList=glazedList.EventList(值);
TransformedList rowObjectsGlazedList=GlazedList.threadSafeList(事件列表);
this.filterList=新过滤器列表(rowObjectsGlazedList);
this.bodyDataProvider=新的ListDataProvider(this.filterList,columnAccessor);
bodyDataLayer=新数据层(this.bodyDataProvider);
ColumnOverrideLabelAccumulator bodyLabelAccumulator=新ColumnOverrideLabelAccumulator(bodyDataLayer);
bodyDataLayer.setConfigLabelAccumulator(bodyLabelAccumulator);
if(ColumnIndicatesForRowHeader!=null){
for(int i=0;iprivate NatTable createTableWithColumnHeaderGroups(Composite parent, List<TableLine> tLines, TableParams params,
  TextMatcherEditor<TableLine> editor) {
String[][] columnHeaders = params.getColumnHeaders();
if( columnHeaders == null || columnHeaders.length != 2 )
  return null;
String[] propertyNames = new String[columnHeaders[1].length];
PropertyToLabels propToLabels = new PropertyToLabels();
for( int i = 0; i < propertyNames.length; i++ ) {
  propertyNames[i] = String.valueOf(i+1) + "_" + columnHeaders[1][i];
  propToLabels.add(propertyNames[i], columnHeaders[1][i]);
}

BodyLayerStack bodyLayerStack =
    new BodyLayerStack(
            tLines,
            new LineDataProviderColumnAccessor(propertyNames.length),
            params.getColumnIndicesForRowHeaders());

ColumnGroupModel columnGroupModel = new ColumnGroupModel();

IRowDataProvider<TableLine> bodyDataProvider =
    new ListDataProvider<TableLine>(tLines, new LineDataProviderColumnAccessor(propertyNames.length));
ColumnGroupBodyLayerStack bodyLayer =
    new ColumnGroupBodyLayerStack(bodyLayerStack.getBodyDataLayer(), columnGroupModel);

Integer[] rowHeights = params.getRowHeights();
if( rowHeights != null && rowHeights.length > 0 ) {
  for( int i = 0; i < rowHeights.length; i++ ) {
    if( rowHeights[i] != null )
      bodyLayer.doCommand(new RowResizeCommand(bodyLayer, i, rowHeights[i]));
  }
}
Integer[] colWidths = params.getColumnWidths();
if( colWidths != null && colWidths.length > 0 ) {
  for( int i = 0; i < colWidths.length; i++ )
    if( colWidths[i] != null )
      bodyLayer.doCommand(new ColumnResizeCommand(bodyLayer, i, colWidths[i]));
}

// Column header
DefaultColumnHeaderDataProvider defaultColumnHeaderDataProvider =
    new DefaultColumnHeaderDataProvider(propertyNames, propToLabels.getPropertyToLabels());
DefaultColumnHeaderDataLayer columnHeaderDataLayer =
    new DefaultColumnHeaderDataLayer(defaultColumnHeaderDataProvider);
ColumnHeaderLayer columnHeaderLayer =
    new ColumnHeaderLayer(columnHeaderDataLayer, bodyLayer, bodyLayer.getSelectionLayer());
ColumnGroupHeaderLayer columnGroupHeaderLayer =
    new ColumnGroupHeaderLayer(
        columnHeaderLayer,
        bodyLayer.getSelectionLayer(),
        columnGroupModel);

Integer[] hrHeights = params.getHeaderRowHeights();
if( hrHeights != null && hrHeights.length > 0 )
  for( int i = 0; i < hrHeights.length; i++ )
    if( hrHeights[i] != null )
      columnGroupHeaderLayer.doCommand(new RowResizeCommand(columnGroupHeaderLayer, i, hrHeights[i]));

List<ColumnHeaderGroup> groups = params.getColumnHeaderGroups();
for( ColumnHeaderGroup group : groups ) {
  List<Integer> indices = group.getIndices();
  int[] indicesArray = new int[indices.size()];
  for( int i = 0; i < indices.size(); i++ )
    indicesArray[i] = indices.get(i);
  columnGroupHeaderLayer.addColumnsIndexesToGroup(group.getName(), indicesArray);
}

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

// Corner
final DefaultCornerDataProvider cornerDataProvider =
    new DefaultCornerDataProvider(defaultColumnHeaderDataProvider, rowHeaderDataProvider);
DataLayer cornerDataLayer =
    new DataLayer(cornerDataProvider);
ILayer cornerLayer =
    new CornerLayer(cornerDataLayer, rowHeaderLayer, columnGroupHeaderLayer);

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

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

editor.setFilterator(new TextFilterator<TableLine>() {

  @Override
  public void getFilterStrings(List<String> baseList, TableLine element) {
    for( int i = 0; i < element.getLength(); i++ )
      baseList.add("" + element.getObjectByColumn(i));
  }
});
editor.setMode(TextMatcherEditor.REGULAR_EXPRESSION);
bodyLayerStack.getFilterList().setMatcherEditor(editor);

natTable.addConfiguration(new DefaultNatTableStyleConfiguration());
natTable.addConfiguration(new ContextMenuConfiguration(natTable));
natTable.addConfiguration(new AbstractRegistryConfiguration() {
  
  @Override
  public void configureRegistry(IConfigRegistry configRegistry) {
    Style cellStyle = new Style();
    cellStyle.setAttributeValue(
            CellStyleAttributes.BACKGROUND_COLOR,
            GUIHelper.COLOR_WIDGET_BACKGROUND);
    configRegistry.registerConfigAttribute(
            CellConfigAttributes.CELL_STYLE, cellStyle,
            DisplayMode.NORMAL, RowHeaderLabel);
  }
});
natTable.configure();
return natTable;  }