2014-04-07 2 views
0

저는 Jface에서 매우 새로워졌으며 지금은 테이블의 마지막 열에 문제가 있습니다. 다음 스크린 샷에서보세요 :마지막 열이 jface에서 너무 커졌습니다.

enter image description here

응용 프로그램이 시작될 때, 마지막 열은 오버 사이즈 도착 볼 수 있고 내가 상관없이 그를 해결할 수 없습니다로! 아래 코드를 볼 수 있습니다 :

package de.vogella.jface.tableviewer; 

import org.eclipse.jface.viewers.ArrayContentProvider; 
import org.eclipse.jface.viewers.ColumnLabelProvider; 
import org.eclipse.jface.viewers.TableViewer; 
import org.eclipse.jface.viewers.TableViewerColumn; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.swt.widgets.Label; 
import org.eclipse.swt.widgets.Table; 
import org.eclipse.swt.widgets.TableColumn; 
import org.eclipse.swt.widgets.Text; 
import org.eclipse.ui.part.ViewPart; 

import de.vogella.jface.tableviewer.model.CenterImageLabelProvider; 
import de.vogella.jface.tableviewer.model.ModelProvider; 
import de.vogella.jface.tableviewer.model.Person; 

public class View extends ViewPart { 

    public static final String ID = "de.vogella.jface.tableviewer.view"; 

    private TableViewer viewer; 
    // static fields to hold the images 
    private static final Image CHECKED = Activator.getImageDescriptor(
      "icons/checked.gif").createImage(); 
    private static final Image UNCHECKED = Activator.getImageDescriptor(
      "icons/unchecked.gif").createImage(); 

    public void createPartControl(Composite parent) { 

    GridLayout layout = new GridLayout(2, false); 
    parent.setLayout(layout); 
    Label searchLabel = new Label(parent, SWT.NONE); 
    searchLabel.setText("Search: "); 
    final Text searchText = new Text(parent, SWT.BORDER | SWT.SEARCH); 
    searchText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL 
     | GridData.HORIZONTAL_ALIGN_FILL)); 
    createViewer(parent); 
    } 

    private void createViewer(Composite parent) { 

    viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL 
     | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); 
    createColumns(parent, viewer); 
    final Table table = viewer.getTable(); 
    table.setHeaderVisible(true); 
    table.setLinesVisible(true); 

    viewer.setContentProvider(new ArrayContentProvider()); 
    // get the content for the viewer, setInput will call getElements in the 
    // contentProvider 
    viewer.setInput(ModelProvider.INSTANCE.getPersons()); 
    // make the selection available to other views 
    getSite().setSelectionProvider(viewer); 
    // set the sorter for the table 

    // define layout for the viewer 
    GridData gridData = new GridData(); 
    gridData.verticalAlignment = GridData.FILL; 
    gridData.horizontalSpan = 2; 
    gridData.grabExcessHorizontalSpace = true; 
    gridData.grabExcessVerticalSpace = true; 
    gridData.horizontalAlignment = GridData.FILL; 
    viewer.getControl().setLayoutData(gridData); 
    } 

    public TableViewer getViewer() { 

    return viewer; 
    } 

    // create the columns for the table 
    private void createColumns(final Composite parent, final TableViewer viewer) { 

    String[] titles = { "First name", "Last name", "Gender", "Married", "Age" }; 
    int[] bounds = { 100, 100, 100, 100, 100 }; 

    // first column is for the first name 
    TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0], 0); 
    col.setLabelProvider(new ColumnLabelProvider() { 

     @Override 
     public String getText(Object element) { 

     Person p = (Person) element; 

     return p.getFirstName(); 
     } 
    }); 

    // second column is for the last name 
    col = createTableViewerColumn(titles[1], bounds[1], 1); 
    col.setLabelProvider(new ColumnLabelProvider() { 

     @Override 
     public String getText(Object element) { 

     Person p = (Person) element; 

     return p.getLastName(); 
     } 
    }); 

    // now the gender 
    col = createTableViewerColumn(titles[2], bounds[2], 2); 
    col.setLabelProvider(new ColumnLabelProvider() { 

     @Override 
     public String getText(Object element) { 

     Person p = (Person) element; 

     return p.getGender(); 
     } 
    }); 

    // now the status married 
    col = createTableViewerColumn(titles[3], bounds[3], 3); 
    col.setLabelProvider(new CenterImageLabelProvider() { 

     @Override 
     public Image getImage(Object element) { 

     if (((Person) element).isMarried()) { 

      return CHECKED; 
     } 
     else { 

      return UNCHECKED; 
     } 
     } 
    }); 

    // now the age 
    col = createTableViewerColumn(titles[4], bounds[4], 4); 
    col.setLabelProvider(new ColumnLabelProvider() { 

     @Override 
     public String getText(Object element) { 

      Person p = (Person) element; 

      return p.getAge().toString(); 
     } 
    }); 

    } 

    private TableViewerColumn createTableViewerColumn(String title, 
      int bound, final int colNumber) { 

    final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, 
     SWT.CENTER); 
    final TableColumn column = viewerColumn.getColumn(); 
    column.setText(title); 
    column.setWidth(bound); 
    column.setResizable(true); 
    column.setMoveable(true); 

    return viewerColumn; 
    } 

    public void setFocus() { 

    viewer.getControl().setFocus(); 
    } 
} 

어떻게 해결할 수 있습니까? 뷰어에

답변

4

레이아웃 :

GridData gridData = new GridData(); 
gridData.verticalAlignment = GridData.FILL; 
gridData.horizontalSpan = 2; 
gridData.grabExcessHorizontalSpace = true; 
gridData.grabExcessVerticalSpace = true; 
gridData.horizontalAlignment = GridData.FILL; 
viewer.getControl().setLayoutData(gridData); 

는 시청자가 가능한 모든 가로 공간을 사용할 것을 말한다, 그래서 시청자는 이런 일이 만들 수있는 마지막 열 크기를 조정했다.

사용

gridData.grabExcessHorizontalSpace = false; 
gridData.horizontalAlignment = GridData.BEGINNING; 

은 여분의 공간을 잡아하지합니다. 또한

혼자 GridData을 떠나 TableLayoutColumnWeightData, 같은 사용 가능한 공간을 채우기 위해 :

TableLayout tableLayout = new TableLayout(); 
table.setLayout(tableLayout); 

... 
... don't call column.setWidth replace with: 
tableLayout.addColumnData(new ColumnWeightData(nnn)); 

nnn는 각 열에 대한 선택의 숫자입니다 폭을 계산하는 데 사용되는 '무게'이다 컬럼의.

+0

설명해 주셔서 감사합니다. 창문이 데이터보다 훨씬 크기 때문에 여전히 "추한"상태입니다. 이 문제를 어떻게 해결할 수 있는지 알고 있습니까? 그리고 귀하의 의견으로는 가장 적절한 접근 방법을 따르고 있습니까? – rsy

+0

TableLayout의 추가 된 사용법 –

관련 문제