3

クラスorg.eclipse.swt.widgets.Groupは継承元でCompositeあり、継承元はScrollableです。ただし、継承されたメソッドを呼び出すと、getVerticalScrollBar()常に が返されますnull

Groupスクロール可能にすることは可能ですか?可能であれば、どのように?

ところで、 にはとしてスタイル設定されたものGroupが多数含まれています。org.eclipse.swt.widgets.Button.ButtonSWT.CHECK

4

2 に答える 2

1

Groupスクロール可能自体を取得できるとは思いません。ただし、に a を追加することで、同じ効果を得ることができScrolledCompositeましたGroup:

group = new Group(parent, SWT.NONE);
group.setText("Images: ");
group.setLayout(new FillLayout());

ScrolledComposite comp = new ScrolledComposite(group, SWT.V_SCROLL | SWT.H_SCROLL);
comp.setLayout(new FillLayout());

Composite innerComp = new Composite(comp, SWT.NONE);
innerComp.setLayout(new FillLayout());

comp.setContent(innerComp);
comp.setExpandHorizontal(true);
comp.setExpandVertical(true);

Buttonその後、を に追加できますComposite innerCompsetMinHeight(int height)でとを使用する必要がある場合がありsetMinWidth(int width)ますScrolledComposite

編集

ここに小さな実例があります。ウィンドウのサイズを小さくすると、スクロールバーが表示されることがわかります。

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

    shell.setLayout(new FillLayout());

    Group imageGroup = new Group(shell, SWT.V_SCROLL | SWT.H_SCROLL);
    imageGroup.setText("Images: ");
    imageGroup.setLayout(new FillLayout());

    ScrolledComposite frontComp = new ScrolledComposite(imageGroup, SWT.V_SCROLL | SWT.H_SCROLL);
    Composite innerFrontComp = new Composite(frontComp, SWT.NONE);
    frontComp.setLayout(new FillLayout());

    innerFrontComp.setLayout(new FillLayout());

    new Button(innerFrontComp, SWT.CHECK).setText("Button");
    new Button(innerFrontComp, SWT.CHECK).setText("Button");
    new Button(innerFrontComp, SWT.CHECK).setText("Button");
    new Button(innerFrontComp, SWT.CHECK).setText("Button");
    new Button(innerFrontComp, SWT.CHECK).setText("Button");
    new Button(innerFrontComp, SWT.CHECK).setText("Button");
    new Button(innerFrontComp, SWT.CHECK).setText("Button");
    new Button(innerFrontComp, SWT.CHECK).setText("Button");

    frontComp.setMinHeight(innerFrontComp.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
    frontComp.setMinWidth(innerFrontComp.computeSize(SWT.DEFAULT, SWT.DEFAULT).x);
    frontComp.setContent(innerFrontComp);
    frontComp.setExpandHorizontal(true);
    frontComp.setExpandVertical(true);

    shell.pack();
    shell.open();

    while(!shell.isDisposed())
    {
        if(!display.readAndDispatch())
            display.sleep();
    }
}
于 2012-08-02T19:34:48.587 に答える
0

SWTのJavadocには次のように書かれています。

レシーバーの垂直スクロール バーがある場合はそれを返し、ない場合は null を返します。

ユーザーがウィンドウ/ダイアログを小さくすると、スクロールバーが表示されます。その場合にのみ、メソッドはnull 以外の値getVerticalScrollBar()getHorizontalScrollBar()返します。そんな時は必ずチェックしなければなりませんnull。これはまさに SWT の構築方法です。

編集:代わりにまたはでgetVerticalScrollBar()メソッドを呼び出してみてください。CompositeShell

于 2012-08-02T19:45:53.007 に答える