2017-10-30 10 views
0

탭 키를 누를 때 셀 편집 기능을 테스트하기 위해 성운 예제 (_301_CustomDataProviderExample)를 편집했습니다 (탭 키를 누르면 다음 셀 편집 사용 가능). GridLayer를 사용할 때 문제가 발생했습니다. 셀 편집기가 잘못 표시되었습니다. 행 및 열 머리글 때문이라고 생각하지만 디버깅 또는 수정 방법을 모르겠습니다. 도와 주시겠습니까? 아니면 힌트를주세요.GridLayer를 사용할 때 Nebula NatTable이 올바른 셀 편집기를 표시하지 않았습니다.

@Override 
public Control createExampleControl(Composite parent) { 

    String[][] testData = new String[3][3]; 
    for (int i = 0; i < 3; i++) { 
     for (int j = 0; j < 3; j++) { 
      testData[i][j] = "" + i + "/" + j; 
     } 
    } 

    IDataProvider bodyDataProvider = new TwoDimensionalArrayDataProvider(testData); 
    final DataLayer bodyDataLayer = new DataLayer(bodyDataProvider); 

    SelectionLayer selectionLayer = new SelectionLayer(bodyDataLayer); 
    ViewportLayer viewportLayer = new ViewportLayer(selectionLayer); 
    viewportLayer.addConfiguration(new DefaultEditConfiguration()); 
    viewportLayer.addConfiguration(new DefaultEditBindings()); 

    IDataProvider rowHeaderDataProvider = new DefaultRowHeaderDataProvider(bodyDataProvider); 
    DataLayer rowHeaderDataLayer = new DataLayer(rowHeaderDataProvider, 40, DataLayer.DEFAULT_ROW_HEIGHT); 
    rowHeaderDataLayer.setColumnsResizableByDefault(true); 
    ILayer rowHeaderLayer = new RowHeaderLayer(rowHeaderDataLayer, viewportLayer, selectionLayer); 

    IDataProvider columnHeaderDataProvider = new LetterColumnHeaderDataProvider(20); 
    ILayer columnHeaderLayer = new ColumnHeaderLayer(
      new DefaultColumnHeaderDataLayer(columnHeaderDataProvider), viewportLayer, selectionLayer); 

    IDataProvider conerDataProvider = new DefaultCornerDataProvider(columnHeaderDataProvider, rowHeaderDataProvider); 
    ILayer cornerLayer = new CornerLayer(new DataLayer(conerDataProvider), rowHeaderLayer, columnHeaderLayer); 

    GridLayer gridLayer = new GridLayer(viewportLayer, columnHeaderLayer, rowHeaderLayer, cornerLayer, false); 

    final NatTable natTable = new NatTable(parent, false); 
    natTable.setLayer(/* viewportLayer */ gridLayer); 

    natTable.addConfiguration(new DefaultNatTableStyleConfiguration() { 
     @Override 
     public void configureRegistry(IConfigRegistry configRegistry) { 
      super.configureRegistry(configRegistry); 
      configRegistry.registerConfigAttribute(
        EditConfigAttributes.CELL_EDITABLE_RULE, 
        IEditableRule.ALWAYS_EDITABLE); 
     } 
    }); 

    natTable.configure(); 

    return natTable; 
} 

추가 :

class LetterColumnHeaderDataProvider implements IDataProvider { 

private int columns = 0; 

public LetterColumnHeaderDataProvider(int columns) { 
    this.columns = columns; 
} 

@Override 
public Object getDataValue(int columnIndex, int rowIndex) { 
    return (char) ('A' + columnIndex); 
    // TODO: support column header AA-AZ, ZA-ZZ, ZZZ... 
} 

@Override 
public void setDataValue(int columnIndex, int rowIndex, Object newValue) { 
    throw new UnsupportedOperationException(); 
} 

@Override 
public int getColumnCount() { 
    return this.columns; 
} 

@Override 
public int getRowCount() { 
    return 1; 
} 
} 

enter image description here

+0

왜 'GridLayer'를 선언했는지 잘 모르겠다. : DefaultGridLayer gridLayer = new DefaultGridLayer (bodyDataProvider, columnHeaderDataProvider);' – aviit

+0

이것은 다른 코드 라인을 복사 할 때 발생하는 자체 생성 문제이다. 목적을 이해하지 못한 예 설명은 답입니다. 하지만 물건을 붙여 넣을 때는 조심해야합니다. –

답변

1

문제가 ViewportLayerDefaultEditConfiguration 등록에 관련이 내가 편집하거나 추가 한 코드입니다. 이렇게하면 GridLayer이 아니라 본체 레이어 스택에 상대적으로 키를 눌렀을 때 확인 된 편집기를 배치하게됩니다. GridLayer에 적용된 기본 구성에는 이미 필요한 편집 구성이 포함되어 있습니다. 하지만 GridLayer 생성자의 마지막 매개 변수를 통해 비활성화했습니다.

간단히 말해서 다음 두 줄을 예제에서 제거하면 GridLayer이없는 음악의 경우에만 필요합니다. 자신의 목적을 이해하지 못하는 경우 다른 예에서 코드를 복사 할 때

viewportLayer.addConfiguration(new DefaultEditConfiguration()); 
viewportLayer.addConfiguration(new DefaultEditBindings()); 

GridLayer gridLayer = new GridLayer(viewportLayer, columnHeaderLayer, rowHeaderLayer, cornerLayer); 

에 그리고 힌트로 GridLayer의 생성을 변경,주의하십시오. NatTable 예제는 일반적으로 코드에서 자세히 설명하는 설명을 포함합니다.

+0

설명해 주셔서 감사합니다! 나는이 행들을 제거하고 다음을 추가하여 이것을 고쳤습니다 :'gridLayer.addConfiguration (new DefaultEditConfiguration()); \t \t gridLayer.addConfiguration (new DefaultEditBindings());' – aviit