如何在 NatTable 中隐藏 row/column headers?

How can I hide row/column headers in a NatTable?

我希望能够向 NatTable 的右键单击菜单添加选项,单击该菜单将导致行或列 headers 隐藏,但也可以恢复。

我最终通过将我的 RowHeaderDataProvider 中的 getColumnCount() 方法中的逻辑更改为 return 标记为隐藏时为 0 或标记为未隐藏时为 1 来解决此问题。同样适用于我的 ColumnHeaderDataProvider 中的 getRowCount()。

常见的做法是对对应的DataLayer进行操作,修改行高。修改 IDataProvider 通常不是一个好的做法,因为 IDataProvider 负责提供数据,而不是数据的呈现方式。所以下面是一个如何切换列 header 图层可见性的示例(假设 hideHeader 是存储当前状态的标志)。

    Button hideButton = new Button(buttonPanel, SWT.PUSH);
    hideButton.setText("Hide/Show");
    hideButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            this.hideHeader = !this.hideHeader;
            if (this.hideHeader) {
                columnHeaderDataLayer.setDefaultRowHeight(0);
            } else {
                columnHeaderDataLayer.setDefaultRowHeight(20);
            }
            natTable.refresh(false);
        }
    });

我知道用户甚至使用这种方法通过将高度慢慢降低到 0 来实现某种过渡。

或者,如果列 header DataLayer 未知,您可以使用 RowResizeCommand

    Button hideButton = new Button(buttonPanel, SWT.PUSH);
    hideButton.setText("Hide/Show");
    hideButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            this.hideHeader = !this.hideHeader;
            if (this.hideHeader) {
                natTable.doCommand(new RowResizeCommand(natTable, 0, 0));
            } else {
                natTable.doCommand(new RowResizeCommand(natTable, 0, 20));
            }
        }
    });