简体   繁体   English

jface表的布局设置

[英]Layout setting for a jface Table

I created a CheckboxTableViewer to show a list of stuff as shown in figure below. 我创建了一个CheckboxTableViewer来显示内容列表,如下图所示。 The problem are the scrollbars of the table are not working as it should. 问题是表格的滚动条无法正常工作。 May be I am missing some layout parameters for the table? 可能是我缺少表格的一些布局参数吗?

表

And here is the code: 这是代码:

public class TableViewerClass {


CheckboxTableViewer tableViewer;

private GridData gridData;

private List<String> checkListNames = new ArrayList<String>();

public TableViewerClass(Shell parent){

    checkListNames.add("Function Trace 1");
    checkListNames.add("Function Trace 2");
    checkListNames.add("Function Trace 3");
    checkListNames.add("Function Trace 4");
    checkListNames.add("Function Trace 5");
    checkListNames.add("Function Trace 6");

    createCheckViewer(parent);
    createControlBox(parent);
}


private void createCheckViewer(Composite parent){

    tableViewer = CheckboxTableViewer.newCheckList(parent, SWT.SINGLE| SWT.BORDER | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);

    gridData = new GridData(SWT.TOP, SWT.TOP, false, false, 3, 1);

    tableViewer.add(checkListNames.get(0));
    tableViewer.add(checkListNames.get(1));
    tableViewer.add(checkListNames.get(2));
    tableViewer.add(checkListNames.get(3));
    tableViewer.add(checkListNames.get(4));
    tableViewer.add(checkListNames.get(5));


    tableViewer.add(checkListNames.get(0));
    tableViewer.add(checkListNames.get(1));
    tableViewer.add(checkListNames.get(2));
    tableViewer.add(checkListNames.get(3));
    tableViewer.add(checkListNames.get(4));
    tableViewer.add(checkListNames.get(5));

    tableViewer.add(checkListNames.get(0));
    tableViewer.add(checkListNames.get(1));
    tableViewer.add(checkListNames.get(2));
    tableViewer.add(checkListNames.get(3));
    tableViewer.add(checkListNames.get(4));
    tableViewer.add(checkListNames.get(5));

    // define layout for the viewer
    GridData gridData = new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1);
    tableViewer.getControl().setLayoutData(gridData);


    final Table table = tableViewer.getTable();

    TableLayout layout = new TableLayout();


    TableViewerColumn col = new TableViewerColumn(tableViewer, SWT.LEAD);
    col.getColumn().setText("Text");
    layout.addColumnData(new ColumnWeightData(500));

    table.setLayout(layout);
    table.setHeaderVisible(true);
    table.setLinesVisible(true);
}

private void createControlBox(Composite parent){

    Group group = new Group(parent, SWT.NONE);
    group.setText("Control Box");
    gridData = new GridData(SWT.LEFT, SWT.TOP, true, false,1,1);
    group.setLayoutData(gridData);

    FillLayout fillLayout = new FillLayout();
    fillLayout.type = SWT.VERTICAL;
    group.setLayout(fillLayout);

    Button button = new Button(group, SWT.PUSH);
    button.setText("Select All");

    Button button2 = new Button(group, SWT.PUSH);
    button2.setText("Deselect All");

    button.addSelectionListener(this.getSelectAllHandler());
    button2.addSelectionListener(this.getDeselectAllHandler());
}

private SelectionListener getSelectAllHandler(){

    SelectionListener selectAll = new SelectionListener(){
        @Override
        public void widgetSelected(SelectionEvent e) {

            tableViewer.setAllChecked(true);
        }

        @Override
        public void widgetDefaultSelected(SelectionEvent e) {
            // TODO Auto-generated method stub

        }
    };

    return selectAll;

}

private SelectionListener getDeselectAllHandler(){

    SelectionListener deselectAll = new SelectionListener(){
        @Override
        public void widgetSelected(SelectionEvent e) {

            tableViewer.setAllChecked(false);
        }

        @Override
        public void widgetDefaultSelected(SelectionEvent e) {
            // TODO Auto-generated method stub

        }
    };

    return deselectAll;

}


public static void main(String[] args) {


    Display display = new Display();
    final Shell shell = new Shell(display);

    shell.setSize(500, 400);

    GridLayout layout = new GridLayout(4, false);

    shell.setLayout(layout);

    shell.setText("JFace Table Example");
    new TableViewerClass(shell);

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

 }

The shell.pack() call recomputes the size of the shell to make it fit the contents. shell.pack()调用将重新计算shell的大小以使其适合内容。

To restrict the size of the table you need to specify a height hint on the table: 要限制表格的大小,您需要在表格上指定高度提示:

GridData gridData = new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1);

gridData.heightHint = 400;  // Vertical size you want

tableViewer.getControl().setLayoutData(gridData);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM