1

使用 SWT ScrollableComposite,是否有一种简单的方法可以设置滚动条位置以使特定元素位于顶部的方式跳转?

例如,如果我有这样一个复合材料,其中包含 26 个标签,按字母顺序排列:

在此处输入图像描述

...然后,假设我想将视图设置为“J”标签并设置滚动条位置,如下所示:

在此处输入图像描述

(这只是一个例子——如果我真的想做我在这里描述的事情,我显然只会使用列表框或表格来代替我的信件。)

这类似于 Internet 浏览器在跳转到页面中的特定标签时的工作方式。

如有必要,这可以通过一堆手动测量计算来完成,但我希望存在更简单的东西。

4

1 回答 1

3

我相信您正在寻找以下方法ScrolledComposite

  org.eclipse.swt.custom.ScrolledComposite.showControl(Control) //make it visible in view port

   org.eclipse.swt.custom.ScrolledComposite.setOrigin(Point) //sets left corner coordinates, read SWT docs

更新答案:

public static void main(String[] args) {
    Display display = new Display();

    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    Map<String,Control> controlMap = new HashMap<String,Control>();
    final ScrolledComposite scrollComposite = new ScrolledComposite(shell,
        SWT.V_SCROLL | SWT.BORDER);

    final Composite parent = new Composite(scrollComposite, SWT.NONE);
    for (int i = 0; i <= 50; i++) {
      Label label = new Label(parent, SWT.NONE);
      String index = String.valueOf(i);
      controlMap.put(index, label);
      label.setText(index);
    }
    GridLayoutFactory.fillDefaults().numColumns(1).applyTo(parent);

    scrollComposite.setContent(parent);
    scrollComposite.setExpandVertical(true);
    scrollComposite.setExpandHorizontal(true);
    scrollComposite.addControlListener(new ControlAdapter() {
      public void controlResized(ControlEvent e) {
        Rectangle r = scrollComposite.getClientArea();
        scrollComposite.setMinSize(parent.computeSize(r.width,
            SWT.DEFAULT));
      }
    });

    shell.open();

    Control showCntrl = controlMap.get(String.valueOf(5));
    if(showCntrl != null){
      scrollComposite.setOrigin(showCntrl.getLocation());
    }
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
    display.dispose();
  }
于 2013-08-19T20:57:00.673 回答