SWT创建两个串联滚动的StyledText

时间:2016-09-22 10:46:36

标签: java swt scrollbar styledtext tandem

我必须创建两个串联滚动的StyledText,我得到的是使用ScrolledComposites创建相同内容的代码。我仅限于使用StyledText,因为我也将其用于其他目的。 我想使用StyledText创建相同的内容link here

我尝试使用ScrolledComposites替换StyledText的相同代码,但它不允许我setOrigin(x , y)

1 个答案:

答案 0 :(得分:1)

您可以使用方法StyledText#setHorizontalPixel()StyledText#setTopPixel()(以及他们的respecrive get方法)来获取和设置位置:

public static void main(String[] args)
{
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    StyledText one = new StyledText(shell, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
    StyledText two = new StyledText(shell, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);

    one.setAlwaysShowScrollBars(true);
    two.setAlwaysShowScrollBars(true);

    one.setText("Scroll scroll scroll\ndown down down\nto to to\nsee see see\nthe the the\nstyled styled styled\ntexts texts texts\nscroll scroll scroll\nin in in\ntandem tandem tandem");
    two.setText("Scroll scroll scroll\ndown down down\nto to to\nsee see see\nthe the the\nstyled styled styled\ntexts texts texts\nscroll scroll scroll\nin in in\ntandem tandem tandem");

    handleVerticalScrolling(one, two);
    handleHorizontalScrolling(one, two);

    shell.pack();
    shell.setSize(200, 100);
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

private static void handleHorizontalScrolling(StyledText one, StyledText two)
{
    ScrollBar hOne = one.getHorizontalBar();
    ScrollBar hTwo = two.getHorizontalBar();

    hOne.addListener(SWT.Selection, e -> {
        int x = one.getHorizontalPixel();
        two.setHorizontalPixel(x);
    });
    hTwo.addListener(SWT.Selection, e -> {
        int x = two.getHorizontalPixel();
        one.setHorizontalPixel(x);
    });
}

private static void handleVerticalScrolling(StyledText one, StyledText two)
{
    ScrollBar vOne = one.getVerticalBar();
    ScrollBar vTwo = two.getVerticalBar();

    vOne.addListener(SWT.Selection, e ->
    {
        int y = one.getTopPixel();
        two.setTopPixel(y);
    });
    vTwo.addListener(SWT.Selection, e ->
    {
        int y = two.getTopPixel();
        one.setTopPixel(y);
    });
}