2012-09-20 4 views
3

테이블의 데이터에서 arraylist를 만들려고합니다. 표시되는 열에서 값을 가져와야하지만 표에 표시되지 않는 열의 값을 가져와야합니다. 테이블 뷰어에서 SWT를 사용하면 테이블에 열을 표시하지 않는 방법에 대해서는 잘 모릅니다. 컬럼 이름을 지정하여 테이블에서 데이터를 가져 오는 방법에 대해서도 알지 못합니다.SWT - 테이블 뷰어 - 열 숨기기 및 열 값 가져 오기

저는 항상 스윙을 사용 했으므로 항상 테이블 모델 클래스를 사용했습니다. 스윙에서는 열을 만들고 숨기고 데이터를 가져 오는 것이 매우 간단합니다.

이전 Swing 프로젝트에서 사용한 방법입니다. 내 테이블 모델 클래스에서

: 나는 다른 클래스 내 테이블의 데이터를 필요로 할 때

public String getColumnName(int column) { 
    String s = null; 

    switch (column) { 
    case ITEMID_COL: { 
     s = "ItemId"; 
     break; 
    } 

그런 다음 getValueAt()

public Object getValueAt(int row, int column) { 
    Object o = null; 

    try { 
    switch (column) { 
     case ITEMID_COL: { 
      o = rds.get(row).rev.getItem().getStringProperty("item_id"); 
      break; 
     } 

그래서 내가했던 일은,

했다
Object item_id = SingletonSelectTable.getInstance().getValueAt(i, SingletonSelectTable.getInstance().ITEMID_COL); 

MAX_COLUMNS을 설정하여 열을 추가하십시오.

질문 :

  1. I가 표시 될 것하지만 여전히 테이블 뷰어를 사용하여 값을 포함하지 않는 테이블에 열을 추가하는 방법을 배울 필요가있다.

  2. 표에서 값에 액세스하는 방법을 알아야하므로 열에서 보이는 데이터와 보이지 않는 데이터의 배열을 만들 수 있습니다.

  3. 테이블 뷰어를 사용해도 가능합니까?

답변

9

가 좋아 :

TableColumn을 숨기려면, 당신은 기본적으로 0에 폭을 설정하고 크기 조정을 방지 할 수 있습니다. 너비를 무언가 >= 0으로 설정하고 크기 조정을 활성화하여 숨기기를 해제하십시오.

ModelProvider에서 TableViewer을 사용하고 있으므로 콘텐츠에 액세스 할 때 열이 숨겨져있는 것은 중요하지 않습니다. 모델에서 Object를 가져 와서 정보를 얻으십시오.

public static void main(String[] args) { 
    final Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setLayout(new GridLayout(2, false)); 

    final TableViewer viewer = new TableViewer(shell, SWT.READ_ONLY); 

    // First column is for the name 
    TableViewerColumn col = createTableViewerColumn("Name", 100, 0, viewer); 
    col.setLabelProvider(new ColumnLabelProvider() { 
     @Override 
     public String getText(Object element) { 
      if(element instanceof Person) 
      { 
       System.out.println("1"); 
       return ((Person)element).getName(); 
      } 
      return ""; 
     } 
    }); 

    // First column is for the location 
    TableViewerColumn col2 = createTableViewerColumn("Location", 100, 1, viewer); 
    col2.setLabelProvider(new ColumnLabelProvider() { 
     @Override 
     public String getText(Object element) { 
      if(element instanceof Person) 
      { 
       System.out.println("2"); 
       return ((Person)element).getLocation(); 
      } 
      return ""; 
     } 
    }); 

    final Table table = viewer.getTable(); 
    table.setHeaderVisible(true); 
    table.setLinesVisible(true); 
    GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); 
    data.horizontalSpan = 2; 
    table.setLayoutData(data); 

    /* This button will hide/unhide the columns */ 
    Button button1 = new Button(shell, SWT.PUSH); 
    button1.setText("Hide/Unhide"); 

    button1.addListener(SWT.Selection, new Listener() { 

     @Override 
     public void handleEvent(Event arg0) { 
      for(final TableColumn column : table.getColumns()) 
      { 
       if(column.getWidth() == 0) 
       { 
        column.setWidth(100); 
        column.setResizable(true); 
       } 
       else 
       { 
        column.setWidth(0); 
        column.setResizable(false); 
       } 
      } 
     } 
    }); 

    /* This button will print the currently selected Person, even if columns are hidden */ 
    Button button2 = new Button(shell, SWT.PUSH); 
    button2.setText("Print"); 

    button2.addListener(SWT.Selection, new Listener() { 

     @Override 
     public void handleEvent(Event arg0) { 
      IStructuredSelection selection = (IStructuredSelection) viewer.getSelection(); 
      Person person = (Person) selection.getFirstElement(); 

      System.out.println(person); 
     } 
    }); 

    viewer.setContentProvider(ArrayContentProvider.getInstance()); 

    final Person[] persons = new Person[] { new Person("Baz", "Loc"), 
      new Person("BazBaz", "LocLoc"), new Person("BazBazBaz", "LocLocLoc") }; 

    viewer.setInput(persons); 

    shell.pack(); 
    shell.open(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 
    display.dispose(); 
} 

private static TableViewerColumn createTableViewerColumn(String title, int bound, final int colNumber, TableViewer viewer) { 
    final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE); 
    final TableColumn column = viewerColumn.getColumn(); 
    column.setText(title); 
    column.setWidth(bound); 
    column.setResizable(true); 
    column.setMoveable(false); 

    return viewerColumn; 
} 

public static class Person { 
    private String name; 
    private String location; 

    public Person(String name, String location) { 
     this.name = name; 
     this.location = location; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getLocation() { 
     return location; 
    } 

    public void setLocation(String location) { 
     this.location = location; 
    } 

    public String toString() 
    { 
     return name + " " + location; 
    } 
} 
1

유일한 노트 0에 설정 열 너비는 라벨의 getText() 방법의 호출을 방지하지 않는 것입니다 : 여기

는/숨기기 열 숨기기를 취소하고 여전히 현재 선택된 사람을 인쇄 할 수 있습니다 예입니다 그 칼럼의 공급자. 이 호출을 피해야하는 경우 (예 : 시간이 많이 소요됨) 해결 방법은 dispose() 트리 열입니다. 열을 다시 표시하려면 다시 만들어야합니다.

관련 문제