2014-10-22 3 views
2

У меня есть диалоговое окно с приведенным ниже кодом. Появится полоса прокрутки, но не прокручивается до конца. Слишком долго, чтобы содержимое в конце не появилось. Даже если диалог изменен, чтобы быть маленьким, содержимое в конце не видно. Пожалуйста, предложите, как заставить панель прокрутки работать в соответствии с приведенным ниже сценарием.Как предотвратить прокрутку ScrollledComposite от бесконечного расширения по вертикали

public class SampleDialog extends TrayDialog { 

public SampleDialog(final Shell shell) { 
    super(shell); 
    this.shell = shell; 

} 


@Override 
public void create() { 
    super.create(); 

} 

@Override 
protected Control createDialogArea(final Composite parent) { 
    final GridLayout layout = new GridLayout(); 
    layout.numColumns = 1; 
    parent.setLayout(layout); 

    final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.BORDER); 
     sc1.setExpandHorizontal(true); 
     sc1.setExpandVertical(true); 
     //sc1.setMinWidth(0); 

     final Composite composite = new Composite(sc1, SWT.NONE); 
     final GridLayout gridLayout = new GridLayout(); 
     gridLayout.numColumns = 2; 
     composite.setLayout(gridLayout); 

     sc1.setContent(composite); 

     //this.sc1.setMinSize(parent.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
     //this.sc1.setMinHeight(50); 
     //this.sc1.setAlwaysShowScrollBars(true); 

     sc1.addControlListener(new ControlAdapter() { 
      @Override 
      public void controlResized(final ControlEvent e) { 
       final Rectangle r = sc1.getClientArea(); 
       sc1.setMinSize(parent.computeSize(r.width, SWT.DEFAULT)); 
      } 
     }); 
    final GridData gridDataLabel = new GridData(); 
      final Label label = new Label(composite, SWT.NONE); 
      label.setText("Testing"); 
      label.setLayoutData(gridDataLabel); 
    for (i = 0 ; i <= n ; i++) {  // n can be 1 to any number -- decided at run time 
     createSampleCombo(composite); 
    } 
} 

public void createSampleCombo(Composite parent) { 
final Composite composite = new Composite(parent, SWT.NONE); 
     final GridLayout layout = new GridLayout(); 
     layout.numColumns = 3; 
     composite.setLayout(layout); 

     final GridData gridDataCombo = new GridData(); 
     gridDataCombo.horizontalAlignment = GridData.FILL; 
     gridDataCombo.grabExcessHorizontalSpace = true; 

     final Combo myCombo = new Combo(composite, SWT.NONE); 
     myCombo.setLayoutData(gridDataCombo); 
     gridDataCombo.minimumWidth = 500; 

     final GridData gridDataButton = new GridData(); 
     final Button browse = new Button(composite, SWT.PUSH); 
     browse.setText("Browse"); 
     browse.setLayoutData(gridDataButton); 
} 
} 

where: 
org.eclipse.jface.dialogs.TrayDialog; 
org.eclipse.swt.layout.GridLayout; 

when n = 10 the dialog looks like this

when n = 20 the dialog, scroll bar is on top

when n = 20 the dialog, and scroll bar is pulled down

в 3-изображение, последний элемент управления не виден и хорошо, и кнопка отмены также не видно. Мне нужна полоса прокрутки, чтобы перейти вниз, чтобы я мог видеть все содержимое. Пожалуйста, подсказывают, как это можно сделать

ответ

1

У меня была похожая проблема совсем недавно, и я решил это следующим образом: Во-первых, вы должны предотвратить ScrolledComposite от расширения по вертикали:

sc1.setExpandVertical(false); 

Если вы измените resizeListener на:

Rectangle clientArea = scrolledComposite.getClientArea(); 
Point minSize = scrolledComposite.getContent().computeSize(clientArea.width, SWT.DEFAULT); 
scrolledComposite.getContent().setSize(minSize); 

ScrolledComposite должен занимать пространство, разрешенное только с макета его контейнера.

Более подробно о том, как использовать ScrolledComposites можно найти здесь: http://www.codeaffine.com/2016/03/01/swt-scrolledcomposite/

+0

я изменил код, как вы предложили и добавил строку ниже (которые я пропустил), он прошел через !!! composite.setSize (400, 400); Спасибо!! – Krishnaveni

Смежные вопросы