2017-01-18 9 views
0

Вот мои примеры кодов, у меня был раздел в моем классе с именем CommentPage, расширенный из FormPage, я использую scrolledComposite в этом разделе, чтобы отобразить некоторое содержимое, но это работает, Доза любой знает почему?Как отобразить прокручиваемый составной контент в разделе в форме swt

public class CommentPage extends FormPage{ 
    private FormToolkit toolkit; 

    public CommentPage (FormEditor editor, String id, String title) { 
    super(editor, id, title); 
    } 
    @Override 
    protected void createFormContent(IManagedForm managedForm) { 
    // TODO Auto-generated method stub 
    super.createFormContent(managedForm); 
    toolkit = managedForm.getToolkit(); 
    form = managedForm.getForm(); 
    toolkit.decorateFormHeading(form.getForm()); 
    form.setText(currVersion.getcName()+currVersion.getvName()); 
    Composite superContainer = form.getBody(); 
    superContainer.setLayout(new GridLayout(2,false)); 
    superContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
    createAreas(superContainer); 
    } 

    private void createAreas(Composite superContainer) { 
    Composite left = toolkit.createComposite(superContainer, SWT.NONE); 
    Composite right = toolkit.createComposite(superContainer, SWT.NONE); 
    GridData leftGrid = new GridData(SWT.FILL,SWT.FILL,true,true); 
    left.setLayoutData(leftGrid); 
    left.setLayout(new GridLayout(1,true)); 
    GridData rightGrid = new GridData(SWT.FILL,SWT.FILL,true,true); 
    right.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true)); 
    right.setLayout(new GridLayout(1,true)); 
    commentArea(right); 
    } 

    private void commentArea(Composite superContainer) { 
    Section section = toolkit.createSection(superContainer, Section.TITLE_BAR|Section.TWISTIE|Section.EXPANDED); 
    section.setText("Comment"); //$NON-NLS-1$ 
    section.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
    section.setLayout(new FillLayout()); 

    Composite container = toolkit.createComposite(section, SWT.NONE); 
    container.setLayout(new GridLayout(1, true)); 
    section.setClient(container); 

    ScrolledComposite scrollContainer = new ScrolledComposite(container, SWT.V_SCROLL|SWT.BORDER); 
    scrollContainer.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false)); 
    scrollContainer.setExpandVertical(true); 
    scrollContainer.setAlwaysShowScrollBars(true); 
    Color white = Display.getCurrent().getSystemColor(SWT.COLOR_WHITE); 
    scrollContainer.setBackground(white); 

    Composite scrollInner = new Composite(scrollContainer, SWT.NONE); 
    scrollInner.setBackground(white); 
    scrollInner.setLayout(new GridLayout(1,false)); 

    Label text = toolkit.createLabel(scrollInner, "test1test2test3"); 
    text.setLayoutData(new GridData()); 

    scrollContainer.setContent(scrollInner); 
    //scrollContainer.setMinSize(scrollInner.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 

    } 
} 

Мой вопрос: почему отображается текст "test1test2test3" для метки в scrolledContainer в методе commentArea техника его подводит?

ответ

1

Используйте setExpandHorizontal метод на ScrolledComposite:

ScrolledComposite scrollContainer = new ScrolledComposite(container, SWT.V_SCROLL|SWT.BORDER); 
scrollContainer.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false)); 
scrollContainer.setExpandVertical(true); 
scrollContainer.setExpandHorizontal(true); // Add this line 

Распаковка только ScrolledComposite кусок кода во что-то легко проверяемые:

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

    // Your code below 
    final ScrolledComposite scrollContainer = new ScrolledComposite(shell, SWT.V_SCROLL | SWT.BORDER); 
    scrollContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); 
    scrollContainer.setExpandVertical(true); 
    scrollContainer.setExpandHorizontal(true); // Added 
    scrollContainer.setAlwaysShowScrollBars(true); 
    final Color white = Display.getCurrent().getSystemColor(SWT.COLOR_WHITE); 
    scrollContainer.setBackground(white); 

    final Composite scrollInner = new Composite(scrollContainer, SWT.NONE); 
    scrollInner.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
    scrollInner.setBackground(white); 
    scrollInner.setLayout(new GridLayout(1, false)); 

    final Label text = new Label(scrollInner, SWT.NONE); 
    text.setText("test1test2test3"); 
    text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

    scrollContainer.setContent(scrollInner); 
    // End your code 

    shell.pack(); 
    shell.open(); 
    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 
    display.dispose(); 
} 
+0

Он работает, добавить хотите задать еще один проблема, почему scrolledComposite не прокручивается, но scorlledForm прокручивается, если в scrollInner много содержимого? – star