2017-05-16 10 views
0

私はJAVA SWTでUIを作成するために取り組んでいます。SWTのCompositeでスクロールを表示するためにsetSizeメソッドが必要なのはなぜですか?

私は、ScrolledCompositeを使用すると混乱します。 CompositeのMinSizeを設定せずにコードがスクロールしないのはなぜですか?

誰でもsetMinSizeがScrolledCompositeで行うことを説明できますか?

はなぜ"setMinSize""のsetSize" inseteadを使用することはできませんか?

以下は私のコードです。

import org.eclipse.swt.SWT; 
import org.eclipse.swt.custom.ScrolledComposite; 
import org.eclipse.swt.graphics.Color; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Button; 
import org.eclipse.swt.widgets.Composite; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 


public class MyPractice { 

public static void main(String[] args) { 

    Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.setLayout(new GridLayout()); 

    final ScrolledComposite sc = new ScrolledComposite(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); 
    sc.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 

    Composite c = new Composite(sc, SWT.NONE); 
    c.setLayout(new GridLayout(7, true)); 
    c.setBackground(new Color(display, 0,255,0)); 

    for (int i = 0; i < 200; i++) { 
     Button b = new Button(c, SWT.PUSH); 
     b.setText("Button " + i); 
    } 

    sc.setContent(c); 
    sc.setExpandHorizontal(true); 
    sc.setExpandVertical(true); 


    //*****Why is this code necessary to get Scroll on UI? 
    sc.setMinSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 

    //Why can't we use "setSize" insetead of setMinSize? setSize does not show scroll. 
    //sc.setSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 


    shell.setSize(300, 500); 
    shell.open(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) 
     display.sleep(); 
    } 
    display.dispose(); 

} 
} 
+0

なぜ 'setSize()'ではなく 'setMinSize()'を呼び出さなければならないのは気になるのですか? – Baz

答えて

3

setSize()setMinSize()は、2つの非常に異なる機能です。 Control#setSize()ScrolledComposite#setMinSize()一方Controlの実際のサイズを設定するScrolledCompositeに特異的であり、スクロールバーの表示を開始するためにどのサイズでそれを伝える:

ScrolledCompositeが有するコンテンツのスクロールを開始するときの最小の幅と高さを指定します水平スクロールバー。この値は、setExpandHorizontal(true)setExpandVertical(true)が設定されている場合にのみ関係します。

スクロールされたコンポジットの最小サイズは、子のサイズに基づいています。

+0

あなたは私に大きな手がかりを与えました、私は私がやっていることにそれを適用できると思います。ありがとう!! –

関連する問題