当前位置: 首页 > 知识库问答 >
问题:

如何锁定swt Table或Jface tableviewer滚动条

梁渊
2023-03-14

我有一个Tableviewer,其中对象添加得非常快,我需要用户能够选择某些元素。问题是我无法找到使滚动条停止滚动的方法。我只需要一个按钮,它将表格锁定在当前位置。

也许你有答案。

共有1个答案

易刚捷
2023-03-14

[编辑]:您可以像Eclipse控制台一样使用切换按钮。您需要保持按钮事件的以下两种状态。

  1. 表#set选择(项)将选择最后一项,以添加的项目为准。(自动滚动)
  2. 表查看器#刷新(对象,真,假)可用于保留所选内容(滚动锁定)。

在这里,我创建了Snippet,它将帮助您了解如何在tableviewer中使用刷新:

public class SamplePart {
private static int i = 1;
private Text txtInput;
private TableViewer tableViewer;

@Inject
private MDirtyable dirty;
private Table table;
private TableColumn column;
private Button btnNewButton;

@PostConstruct
public void createComposite(Composite parent) {
    parent.setLayout(new GridLayout(2, false));
    txtInput = new Text(parent, SWT.BORDER);
    txtInput.setMessage("Enter text to mark part as dirty");
    txtInput.addModifyListener(new ModifyListener() {
        @Override
        public void modifyText(ModifyEvent e) {
            dirty.setDirty(true);
        }
    });
    txtInput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    btnNewButton = new Button(parent, SWT.TOGGLE);
    btnNewButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            if(!btnNewButton.getSelection()){
                //once button is pressed it will preserve the selection
                tableViewer.refresh( table , true, false);
            }
        }
    });
    btnNewButton.setText("scroll");
    tableViewer = new TableViewer(parent);
    table = tableViewer.getTable();
    column = new TableColumn(table, SWT.NONE);
    column.setText("Column " + 0);
    TableItem item = new TableItem(table, SWT.NONE);
    item.setText(0, "sample Item " );
    GridData gridData = new GridData(GridData.FILL_BOTH);
    gridData.horizontalSpan = 2;
    gridData.widthHint = 440;
    tableViewer.getTable().setLayoutData(gridData);
    Job job = new  Job("UI") {
        @Override
        protected IStatus run(IProgressMonitor monitor) {
            for(int j = 1 ; j<10000000; j++){
                Display.getDefault().syncExec(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Thread.currentThread().sleep(100);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        addItem();
                        table.getColumn(0).pack();
                    }
                });
            }
            return ASYNC_FINISH;
        }
    };
    job.schedule();
}

private void addItem() {
    i++;
    TableItem item = new TableItem(table, SWT.NONE);
    item.setText(0, "sample Item "+i );
    if(!btnNewButton.getSelection()){
        table.setSelection(item);
    }
}

@Focus
public void setFocus() {
    tableViewer.getTable().setFocus();
}

@Persist
public void save() {
    dirty.setDirty(false);
}
}
 类似资料:
  • 滚动条显示位置都是在最右侧或最底部,怎样控制滚动条显示在某一个div里面或为一个位置? 不是说滚动位置,滚动条的显示位置

  • 问题内容: 让我使用这个小而简单的示例: 假设该函数由我无权访问的其他线程调用。 我想使用synchonize方法来确保该字符串每次仅由一个函数使用。换句话说,功能不能与同时运行。 问题答案: 那很简单: 请注意,我 既没有 使方法本身同步, 也没有 在上同步。我坚信,除非您 有意 公开该锁,否则仅对只有您的代码才能访问的对象获取锁是个好主意。这样可以轻松地向自己保证,其他任何东西都不会以与您的代

  • 我找不到任何选项、设置或键盘快捷键来禁用或隐藏那个烦人的滚动条。我只是觉得它没有用,而且很分散注意力。 也不能像Atom一样编辑编辑器的CSS。

  • 我正在尝试获取一些关于组件的信息,这些组件按标准包含在中。特别是我对阅读水平的感兴趣。我怎么参考?

  • 问题内容: 我有一张带桌子的桌子。 我需要访问并递增。 在访问期间,我需要锁定特定的用户行(而不是整个表)。 我该怎么做呢? 表格类型为。 问题答案: MySQL仅使用MyISAM表中的表级锁定。如果可以,请切换到InnoDB进行行级锁定。 这是指向MySQL网站的链接,该链接描述了由SQL语句为InnoDB表设置的锁。 http://dev.mysql.com/doc/refman/5.0/en

  • 如何控制滚动条滚动到指定位置后,整体固定,滚动条控制某一元素移动,元素移动完成后整体才可以继续往下滑,求求大佬们指点!!!o(╥﹏╥)o