JavaSWT-ScrolledComposite内部组

JavaSWT-ScrolledComposite内部组,java,scroll,swt,scrolledcomposite,Java,Scroll,Swt,Scrolledcomposite,我在将Scrolled Composite放入组中时遇到问题-它在组中不显示ScrolledComposite必须滚动标签 final private static Group group_netpbmOutput = new Group(shell, SWT.NONE); final private static ScrolledComposite scroll_netpbmOutput = new ScrolledComposite(group_netpbmOutput, SWT.V_SCR

我在将
Scrolled Composite
放入
组中时遇到问题-它在
组中不显示
ScrolledComposite
必须滚动
标签

final private static Group group_netpbmOutput = new Group(shell, SWT.NONE);
final private static ScrolledComposite scroll_netpbmOutput = new ScrolledComposite(group_netpbmOutput, SWT.V_SCROLL | SWT.H_SCROLL);
final private static Label labelImage_netpbmOutput = new Label(scroll_netpbmOutput, SWT.BORDER);

//init Group
group_netpbmOutput.setLayout(new FillLayout());
formData = new FormData(((FormData)group_options.getLayoutData()).width, 200);
formData.top = new FormAttachment(group_options, 50, SWT.BOTTOM);
formData.left = new FormAttachment(group_options, 0, SWT.LEFT);
group_netpbmOutput.setLayoutData(formData);
group_netpbmOutput.setFont(font_group);
group_netpbmOutput.setText("Netpbm output");

//init Label
labelImage_netpbmOutput.setBackgroundImage(new Image(...));

//init ScrollComposite
scroll_netpbmOutput.setLayout(new FillLayout());
scroll_netpbmOutput.setContent(labelImage_netpbmOutput);
编辑:对Baz回答的反应

这是可行的,但是……图片是这样显示的(应该只有一个“stackoverflow”):


不太清楚你的代码为什么不工作。这可能是因为您没有通过
scrolled composite\setMinSize(Point)
设置
scrolled composite
的最小大小

不过,这确实很管用:

public static void main(String[] args)
{
    Display display = new Display();
    Shell shell = new Shell();
    shell.setText("StackOverflow");
    shell.setLayout(new GridLayout(1, false));

    Group group = new Group(shell, SWT.NONE);
    group.setText("Group");
    group.setLayout(new GridLayout(1, false));
    group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    ScrolledComposite scroll = new ScrolledComposite(group, SWT.V_SCROLL | SWT.H_SCROLL);
    scroll.setLayout(new GridLayout(1, false));
    scroll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Image image = new Image(display, "stackoverflow.png");

    Label label = new Label(scroll, SWT.NONE);
    label.setImage(image);

    scroll.setContent(label);
    scroll.setExpandHorizontal(true);
    scroll.setExpandVertical(true);
    scroll.setMinSize(label.computeSize(SWT.DEFAULT, SWT.DEFAULT));

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

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

    image.dispose();
}
看起来像这样:


不太清楚为什么代码不起作用。这可能是因为您没有通过
scrolled composite\setMinSize(Point)
设置
scrolled composite
的最小大小

不过,这确实很管用:

public static void main(String[] args)
{
    Display display = new Display();
    Shell shell = new Shell();
    shell.setText("StackOverflow");
    shell.setLayout(new GridLayout(1, false));

    Group group = new Group(shell, SWT.NONE);
    group.setText("Group");
    group.setLayout(new GridLayout(1, false));
    group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    ScrolledComposite scroll = new ScrolledComposite(group, SWT.V_SCROLL | SWT.H_SCROLL);
    scroll.setLayout(new GridLayout(1, false));
    scroll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    Image image = new Image(display, "stackoverflow.png");

    Label label = new Label(scroll, SWT.NONE);
    label.setImage(image);

    scroll.setContent(label);
    scroll.setExpandHorizontal(true);
    scroll.setExpandVertical(true);
    scroll.setMinSize(label.computeSize(SWT.DEFAULT, SWT.DEFAULT));

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

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

    image.dispose();
}
看起来像这样:


图像重复,因为您使用的是
Label#setBackgroundImage(图像)
而不是
Label#setImage(图像)
.OMG!那是个愚蠢的错误。现在一切正常,谢谢你Baz:)没问题,很高兴能提供帮助。图像会重复,因为你使用的是
Label\setBackgroundImage(image)
而不是
Label\setImage(image)
.OMG!那是个愚蠢的错误。现在一切都好了,谢谢你,巴兹:)没问题,很高兴能帮上忙。