如何以编程方式垂直滚动SWT表? 我正在桌子上实现搜索功能。找到某个项目后,它将滚动到找到的项目。
答案 0 :(得分:32)
您可能想尝试几种方法:
Table.showItem(TableItem)
Table.showSelection()
Table.showColumn(TableColumn)
Table.setTopIndex(int)
除此之外,我建议使用JFace中的TableViewer。然后你用这种方法滚动到一个项目:
TableViewer.reveal(Object)
答案 1 :(得分:1)
我的全职工作是开发SWT(在Linux上),我希望能够提供全面的答案:
从SWT代码的角度来看(至少在GTK上),只有3个Table函数通过内部本机调用gtk_tree_view_scroll_to_*()
setTopIndex();
showSelection();
showColumn();
解释他们的所作所为&如何使用它们:
这可以通过设置焦点或选择特定的表项来完成。
表:
setTopIndex(int) // Btw for Tree it's setTopItem(..)
showSelection() // which is also reached via setSelection().
setTopIndex(int)以编程方式将视图移动到所需位置。
以下是执行所需作业的[Snippet52] [1]的修改版本:
public static void main (String [] args) {
Display display = new Display ();
Shell shell = new Shell (display);
Table table = new Table (shell, SWT.BORDER | SWT.MULTI);
Rectangle clientArea = shell.getClientArea ();
table.setBounds (clientArea.x, clientArea.y, 200, 200);
for (int i=0; i<128; i++) {
TableItem item = new TableItem (table, SWT.NONE);
item.setText ("Item " + i);
}
table.setTopIndex(95); // <<<< This is the interesting line.
shell.pack ();
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
}
另一方面, showSelection()将视图滚动到当前所选项目。各种setSelection(..)
方法也调用此方法。
I.e setSelection(..)
通常用于滚动到所需的项目并在其上设置键盘焦点。如果您在树中搜索某个项目并希望用户输入(例如输入&#39;)以对您找到的项目执行操作,则此功能非常有用。 Snippet52(如上所述)执行此任务。
现在值得注意的是setSelection(..)没有触发selectionListeners(...),因此调用此方法不会调用相关的操作。
这是通过&#39; showColumn()&#39;专注于特定列来完成的。
下面是一个示例代码段,可以创建一些行和列然后 滚动到最后一列。
public static void main (String [] args) {
Display display = new Display ();
Shell shell = new Shell (display);
Table table = new Table (shell, SWT.BORDER | SWT.MULTI);
table.setHeaderVisible (true);
Rectangle clientArea = shell.getClientArea ();
table.setBounds (clientArea.x, clientArea.y, 100, 100);
String[] titles = {"First", "Second", "Third", "Fourth", "Fifth"};
for (int i=0; i<titles.length; i++) {
TableColumn column = new TableColumn (table, SWT.NONE);
column.setText (titles [i]);
}
for (int i=0; i<128; i++) {
TableItem item = new TableItem (table, SWT.NONE);
item.setText (new String [] {"" + i, ""+i, ""+i, ""+i});
}
for (int i=0; i<titles.length; i++) {
table.getColumn (i).pack ();
}
shell.pack ();
shell.open ();
display.asyncExec(
// Sometimes table column sizes are computed later at runtime,
// to get around it, set the column index after initialization.
() -> table.showColumn(table.getColumn(4))
);
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}
在SWT内部,树/表/列表都使用相同的本地树&#39;树。窗口小部件。
以上示例也可用于列表和表格,区别在于:
setTopIndex(..)
为setTopItem(..)
。 如果您还有其他问题,请与我们联系。
答案 2 :(得分:0)
我真的不知道您需要搜索什么,但您也可以考虑过滤表格以获得您想要的元素(有点像快速搜索)。
检查出来: http://eclipsesource.com/blogs/2012/10/26/filtering-tables-in-swtjface/
希望它有所帮助,欢呼!