2009-06-04 2 views
1

TableViewer을 사용하여 테이블에 정보를 표시합니다. 사용자는 표의 한 행을 선택하여 표시된 옵션 중 하나를 선택할 수 있습니다.테이블 뷰어가 줄이 아니라 매트릭스 순서로 표시

행을 선택할 수있는 매트릭스 형식의 표를 만들고 싶습니다. 행 2 열 3과 같이 테이블의 모든 항목을 선택할 수 있어야합니다. 모든 항목 선택에 대해이 항목을 TableViewer에서 처리 할 때 조치가 호출됩니다.

지금까지 필자는 CellModifier와 CellEditors를 테이블 열의 행에 추가 할 수 있지만 작업에 대한 참조는 항상 선 개체이며 선택된 TableItem은 아닙니다.

누군가가 컴포지트 내부에 그러한 행렬을 만드는 방법을 보여주는 예가 있습니까? GridLayout을 설정하고 For 루프에서 구성 요소를 추가하여 만들 수 있지만 새로운 자식이있는 컴포지트를 다시 그리려면 문제가 발생합니다. TableViewer는 이미이 처리 기능을 가지고 있으므로 다시 구현하지 않아도됩니다.

답변

2

이전에 같은 문제가 있었지만 해결 방법을 찾은 유일한 방법은 테이블 뷰어와 연결된 SWT 테이블 위젯에 마우스 수신기를 등록하는 것이 었습니다.

MouseListener columnSelectionMouseListener = new ColumnSelectionMouseListener(); 
getViewer().getTable().addMouseListener(columnSelectionMouseListener); 

public class ColumnSelectionMouseListener implements MouseListener { 

    private TableColumn selectedColumn; 

    @Override 
    public void mouseDoubleClick(MouseEvent e) { 
     // Nothing to do here 
    } 

    @Override 
    public void mouseDown(MouseEvent e) { 
     table = (Table) e.widget; 
    TableItem item = table.getItem(new Point(e.x, e.y)); 
    for (int i = 0; i < table.getColumnCount(); i++) { 
     TableColumn column = table.getColumn(i); 
     Rectangle bounds = item.getBounds(i); 
     if (bounds.contains(e.x, e.y)) { 
      selectedColumn = column; 
     } 
    } 
    } 

    @Override 
    public void mouseUp(MouseEvent e) { 
     // Nothing to do here 
    } 

    public TableColumn getSelectedField() { 
      return selectedColumn; 
    } 
} 

다음, 시청자의 선택 리스너에서 예를 들어, 당신은 열을 마우스를 누르면 선택된 라인이 적절한을 수행하기 위해 시청자의 선택에서 오는 그 결합되었을 때 선택된 마우스 청취자에게 요청할 수 있습니다 동작.

희망이 도움이 될 수 있습니다.

마누

관련 문제