2017-05-16 15 views
0

나는 JAVA SWT로 UI를 만들기 위해 작업 중이다.SWT에서 Composite의 스크롤을 표시하기 위해 setSize 메소드가 필요한 이유는 무엇입니까?

ScrolledComposite를 사용하면 혼란 스럽습니다. 내 코드가 복합 재료의 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()는 두 개의 매우 다른 기능입니다. Control#setSize()ScrolledComposite에 특정한 ControlScrolledComposite#setMinSize() 반면의 실제 크기를 설정하고, 스크롤 바를 표시 시작하는 크기를 말한다 :

ScrolledComposite이 가지고있는 콘텐츠를 스크롤링 시작한다있는 최소 폭 및 높이를 지정을 가로 스크롤 막대. 이 값은 setExpandHorizontal(true)setExpandVertical(true)이 설정된 경우에만 관련이 있습니다.

스크롤 된 합성물의 최소 크기는 하위 크기를 기준으로합니다.

+0

당신은 내게 큰 단서를 주었고, 내가하는 일에 그것을 적용 할 수 있다고 생각합니다. 감사!! –