SWT: 테이블 컬럼 선택 식별하기

eclipse 플러그인 개발 시 테이블의 선택을 다른 뷰나 에디터로 전달하는 것과 같은 일반적인 행위에 대해서는 ISelection 매커니즘 덕분에 많은 부분 저수준의 SWT 위짓을 제어할 필요가 없다. 하지만 특정 테이블 컬럼에 진행 상태바를 추가하거나 특정 컬럼의 선택에 반응해야 하는 경우에는 직접 SWT 위짓을 제어해야 한다.

 

마우스 클릭 지점에 기반한 선택된 Cell 식별하기

마우스 선택 좌표를 기준으로 선택된 테이블의 행과 열 정보를 얻어오는 방법이다. 설명은 주석으로 포함한다.

 

  1. // org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet3.java
  2. // Eclipse Public License v1.0
  3.  
  4. table.addListener(SWT.MouseDown, new Listener() {
  5.     public void handleEvent(Event event) {
  6.         //1. 이벤트가 발생한 마우스 좌표 얻어옴
            Point pt = new Point(event.x, event.y);
  7.         //2. 해당 좌표로부터 아이템 얻어옴
            TableItem item = table.getItem(pt);
            if (item == null)
                return;
  8.         //3. 아이템의 컬럼 중 선택좌표를 포함하는 컬럼 인덱스 계산
            for (int i = 0; i < columnCount; i++) {
                Rectangle rect = item.getBounds(i);
                if (rect.contains(pt)) {
                    int index = table.indexOf(item);
                    System.out.println("Item " + index + "-" + i);
                 }
            }
        }
    });

 

테이블 커서에 기반한 선택된 Cell 식별하기

테이블 커서를 이용한 테이블 컬럼 정보를 알아오는 방법이다. 테이블 커서를 생성하면 방향키를 이용해서 테이블을 순회할 수 있다. 커서를 생성하면 좌표 정보를 통해 컬럼 정보를 얻어오는 것과 비교해서 컬럼 정보를 수정하는 등의 풍부한 기능을 제공할 수 있다.

 

  1. // org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet96.java 참조
  2. // Eclipse Public License v1.0
  3.  
  4. // 1. 테이블을 순회하기 위한 TableCursor을 생성한다.
    final TableCursor cursor = new TableCursor(table, SWT.NONE);

    cursor.addSelectionListener(new SelectionAdapter() {
        // 2. 테이블의 특정 컬럼이 선택되면 커서로부터 선택된 행과 열의 정보를 얻어온다.
        public void widgetSelected(SelectionEvent e) {
  5.         int columnIndex = cursor.getColumn();
  6.         TableItem item = cursor.getRow();
        }

        public void widgetDefaultSelected(SelectionEvent e) {
        }
    });

 

관련문서