这是我的代码,可是无法显示每一个列的标题,我是刚研究swt,请高手们看下哪理由问题。import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
public class CreatTableViewer { private Table table;


//创建通讯录表格
public void creatTableViewerPeople(Composite composite){
/**第一步:定义一个TableViewer对象,式样:MULTI可多选,H_SCROLL 有水平滚动条
 * V_SCROLL有垂直滚动条,BORDER有边框,FULL_SELECTION整行选择。
*/
final TableViewer tableViewerPeople = new TableViewer(composite, SWT.BORDER|SWT.MULTI|SWT.FULL_SELECTION);
table = tableViewerPeople.getTable();
table.setLinesVisible(true);
table.setHeaderVisible(true);
table.setBounds(91, 85, 100, 100);
TableLayout tLayout = new TableLayout();
table.setLayout(tLayout);
tLayout.addColumnData(new ColumnWeightData(10)); 
new TableColumn(table,SWT.NONE).setText("ID 号");
tLayout.addColumnData(new ColumnWeightData(40)); 
new TableColumn(table,SWT.NONE).setText("姓名");
tLayout.addColumnData(new ColumnWeightData(20)); 
new TableColumn(table,SWT.NONE).setText("性别");
}
public static void main(String[] args){
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(570, 443);
shell.setText("SWT Application");
shell.setLayout(new FormLayout());

CreatTableViewer ct = new CreatTableViewer();
final Composite composite1 = new Composite(shell,SWT.NONE);
final FormData fd_composite = new FormData();
fd_composite.bottom = new FormAttachment(100, -5);
fd_composite.right = new FormAttachment(0, 535);
fd_composite.top = new FormAttachment(0, 0);
fd_composite.left = new FormAttachment(0, 0);
composite1.setLayoutData(fd_composite);

ct.creatTableViewerPeople(composite1);

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

解决方案 »

  1.   

    我的这个 org.eclipse.jface.viewers.ColumnWeightData 用eclipse无法自动导入,是我手动导入的,但是我看jar已经导入项目了。我用的是jdk6
    请教高手们看看,在线等。着急啊。 
      

  2.   

    用了TableViewer就没有必要用Table了,你要为TableViewer配置ContentProvider,LabelProvider。
    你先用熟SWT再用JFace吧。
    你的代码最简单的改法也就是这样了public class CreatTableViewer { public void creatTableViewerPeople(Composite composite) {
    Table table = new Table(composite, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
    table.setLinesVisible(true);
    table.setHeaderVisible(true); TableLayout tLayout = new TableLayout();
    table.setLayout(tLayout);
    tLayout.addColumnData(new ColumnWeightData(10));
    TableColumn c1 = new TableColumn(table, SWT.NONE);
    c1.setText("ID 号");
    tLayout.addColumnData(new ColumnWeightData(40));
    new TableColumn(table, SWT.NONE).setText("姓名");
    tLayout.addColumnData(new ColumnWeightData(20));
    new TableColumn(table, SWT.NONE).setText("性别");
    new TableViewer(table);
    } public static void main(String[] args) {
    final Display display = Display.getDefault();
    final Shell shell = new Shell();
    shell.setSize(570, 443);
    shell.setText("SWT Application");
    shell.setLayout(new FillLayout()); CreatTableViewer ct = new CreatTableViewer();
    final Composite composite1 = new Composite(shell, SWT.NONE);
    composite1.setLayout(new FillLayout());
    ct.creatTableViewerPeople(composite1); shell.layout();
    shell.open();
    while (!shell.isDisposed()) {
    if (!display.readAndDispatch())
    display.sleep();
    }
    }}
      

  3.   

    至于你无法显示列,只要在main里加上composite1.setLayout(new FillLayout());就行了
      

  4.   

    谢谢MT520,问题解决了。
    顺别问下为TableViewer配置ContentProvider,LabelProvider,
    ContentProvider,LabelProvider是什么意思,干什么用的?
      

  5.   

    就是MVC拉,你的数据是Model,ContentProvider负责把Model转化成TableViewer能理解的数据,LabelProvider再根据这些数据来决定界面显示什么。