首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eclipse RCP tableViewer未正确显示

Eclipse RCP tableViewer未正确显示
EN

Stack Overflow用户
提问于 2015-03-04 20:36:58
回答 1查看 469关注 0票数 0

我的视图中有两个jface TableViewers,它们都定义了两个垂直方向占用相同空间的jface,或者换句话说,它们都定义为获取多余的垂直空间并填充垂直对齐。这样,视图才能正确显示,在小屏幕上,输入越多的表格就会获得更多的空间,而在大屏幕上,两个表格就会获得相同的空间,这很好:

但是,由于来自底部表格的输入每次都是相同的,所以我真正想要的是让底部表格只获得显示该输入所需的空间量。但我不能这样做,我设置了底部的桌子不抓住多余的垂直对齐,但它做的是这样的:

然后..。当我调整窗口大小时。BAM,它可以正确显示:

我不能理解这种行为..有人能帮帮忙吗?这是我的代码:

代码语言:javascript
复制
private void createTableViewers(Composite parent) {

        // TABLE 1
        Composite compositeTableImpostos = new Composite(parent, SWT.NONE);
        compositeTableImpostos.setLayout(new FillLayout());
        compositeTableImpostos.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));

        tableImpostos = createTableViewer(compositeTableImpostos, 
                InterfaceVARS.REGISTOCOLABORADORES_TABLEVIEWER_COLUMNSTYLE, 
                LabelVARS.REGISTOCOLABORADORES_TABLEVIEWER_COLUMN_TITLES, 
                InterfaceVARS.REGISTOCOLABORADORES_TABLEVIEWER_COLUMNSIZE,
                InterfaceVARS.STYLE_TABLE_SINGLE);

        tableImpostos.setContentProvider(contentProvider = new ImpostosContentProvider(tableImpostos));
        tableImpostos.setLabelProvider(new ImpostosLabelProvider());

        // TABLE 2
        Composite compositeTableLinhasDespesa = new Composite(parent, SWT.NONE);
        compositeTableLinhasDespesa.setLayout(new FillLayout());
        final GridData gridData2 = new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1);
        compositeTableLinhasDespesa.setLayoutData(gridData2);

        tableLinhasDespesa = createTableViewer(compositeTableLinhasDespesa, 
                InterfaceVARS.REGISTODESPESAS_TABLEVIEWER_COLUMNSTYLE, 
                LabelVARS.REGISTODESPESA_TABLEVIEWER_COLUMN_TITLES, 
                InterfaceVARS.REGISTODESPESAS_TABLEVIEWER_COLUMNSIZE, 
                InterfaceVARS.STYLE_TABLE_MULTI);

        tableLinhasDespesa.setContentProvider(linhasContentProvider = new LinhasDespesaContentProvider(tableLinhasDespesa, contentProvider));
        tableLinhasDespesa.setLabelProvider(new LinhasDespesaLabelProvider());
    }
代码语言:javascript
复制
public class CustomTableViewer {

    //Viewer
    private TableViewer tableViewer;
    private TableColumnLayout tableViewerLayout;

    //Columns
    private String titles[];
    private int columnSize[];
    private int columnStyle[];


    public CustomTableViewer(Composite composite, int[] columnStyle, String titles[], int[] columnSize, int STYLE){

        this.titles = titles;
        this.columnStyle = columnStyle;
        this.columnSize = columnSize;

        tableViewerLayout = new TableColumnLayout();
        Composite compositeTable = new Composite(composite, SWT.NONE);
        compositeTable.setLayout(tableViewerLayout);
        tableViewer = new TableViewer(compositeTable, STYLE);

        Table table = tableViewer.getTable();
        table.setLinesVisible(true);
        table.setHeaderVisible(true);
        addTableViewerColumns();
        addTableViewerListeners();
    }

    private void addTableViewerColumns() {
        for(int index=0 ; index<titles.length ; index++)
            createTableColumn(columnStyle[index], titles[index], columnSize[index], columnSize[index], true, true);
    }

    private TableViewerColumn createTableColumn(int STYLE, String title, int weight, int minWidth, boolean moveable, boolean resizable) {
        TableViewerColumn viewerColumn = new TableViewerColumn(tableViewer, STYLE);
        TableColumn column = viewerColumn.getColumn();
        column.setText(title);
        column.setMoveable(moveable);
        tableViewerLayout.setColumnData(column, new ColumnWeightData(weight, minWidth, resizable));
        return viewerColumn;
    }

    public void addTableViewerListeners() {
        tableViewer.getTable().addControlListener(new ResizeListener(tableViewer));
    }

    public TableViewer getTableViewer(){
        return tableViewer;
    }

    public class ResizeListener implements ControlListener {

        private TableViewer tableViewer;

        public ResizeListener(TableViewer tableViewer) {
            this.tableViewer = tableViewer;
        }

        @Override
        public void controlMoved(ControlEvent e) {

        }

        @Override
        public void controlResized(ControlEvent e) {
            TableColumn[] colunas = tableViewer.getTable().getColumns();
            for(int i=0; i<colunas.length; i++) {
                tableViewerLayout.setColumnData(colunas[i], new ColumnWeightData(
                        columnSize[i],columnSize[i], 
                        true));
            }
        }
    }

}
EN

回答 1

Stack Overflow用户

发布于 2015-03-05 03:53:09

在调用setInput()之后,在表的父组合中调用layout(new Control[] {tableViewer2.getControl()})方法就完成了这项工作!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28854699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档