2016-10-21 5 views
1

J'essaie de créer un conteneur contenant un certain nombre de boutons après avoir sélectionné un certain nombre de boutons, mais pour l'instant, la barre de défilement n'apparaît pas.ScrolledLa barre de défilement verticale n'apparaît pas

EDIT

MoBuConLTLUI Classe

public class MoBuConLTLUI extends Composite { 

     public MoBuConLTLUI(Composite parent) { 
      super(parent, SWT.NONE); 
      this.setLayout(new GridLayout()); 
      createScrollableComposite(parent); 
     } 

     public void createScrollableComposite (Composite parent) { 
      // set the size of the scrolled content - method 1 
      final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); 
      final Composite c1 = new Composite(sc1, SWT.V_SCROLL); 
      sc1.setContent(c1); 
      sc1.setMinSize(c1.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
      GridLayout layout = new GridLayout(); 
      layout.numColumns = 1; 
      c1.setLayout(layout); 
      Button b1 = new Button (c1, SWT.PUSH); 
      b1.setText("first button"); 
      c1.setSize(200,200); 


      Button add = new Button (parent, SWT.PUSH); 
      add.setText("add children"); 
      final int[] index = new int[]{0}; 
      add.addListener(SWT.Selection, new Listener() { 
       public void handleEvent(Event e) { 
        index[0]++; 
        Button button = new Button(c1, SWT.PUSH); 
        button.setText("button "+index[0]); 
        // reset size of content so children can be seen - method 1 
        c1.layout(); 
       } 
      }); 
    } 
} 

EDIT Le parent est initialisé comme suit

public class TestBundleUI extends AbstractEntryPoint{ 
    private static final long serialVersionUID = -7954149221017272321L; 
    private Composite testUiParentComposite; 
    @Override 
    public void createContents(Composite parent) { 
     this.testUiParentComposite = parent; 
     testUiParentComposite.setLayout(new GridLayout()); 
     new MoBuConLTLUI(parent); 
    } 
} 
+0

Il est bien que vous mettez à jour votre question et d'ajouter des informations, mais aussi longtemps que votre code est non seulement une méthode 'main' avec la boucle d'événements et certains widgets, il va être difficile de vous aider . – Baz

Répondre

2

La chose principale est que vous manque un

c1.setSize(c1.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 

dans l'écouteur de sélection.

Aussi, vous devez utiliser SWT.NONE pour la c1Composite, en utilisant SWT.V_SCROLL donne une barre de défilement supplémentaire non désirée.

Puisque vous n'utilisez pas setExpandVertical il n'y a pas de point dans appelé setMinSize.

ceci marche:

final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); 
final Composite c1 = new Composite(sc1, SWT.NONE); 
sc1.setContent(c1); 
final GridLayout layout = new GridLayout(); 
layout.numColumns = 1; 
c1.setLayout(layout); 
final Button b1 = new Button (c1, SWT.PUSH); 
b1.setText("first button"); 
c1.setSize(200,200); 

final Button add = new Button(parent, SWT.PUSH); 
add.setText("add children"); 
final int[] index = new int[]{0}; 
add.addListener(SWT.Selection, new Listener() { 
    public void handleEvent(final Event e) { 
     index[0]++; 
     final Button button = new Button(c1, SWT.PUSH); 
     button.setText("button "+index[0]); 
     // reset size of content so children can be seen - method 1 
     c1.setSize(c1.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
     c1.layout(); 
    } 
}); 
+0

Vous étiez de nouveau en avance de quelques secondes :) +1 – Baz

+0

Dans ce cas, le 'ScrolledComposite' est juste redimensionné et aucune barre de défilement n'apparaît –

+1

@IliaAptsiauri Ce n'est pas ce que je reçois. Publier un [mcve] correct, je n'ai aucune idée de ce qu'est 'AbstractEntryPoint'. –

1

Il y a trois choses qui manquent dans votre code:

  1. Votre Composite ne devrait pas utiliser SWT.V_SCROLL comme le style. Utilisez simplement SWT.NONE.

  2. Vous devez appeler ce qui suit sur la ScrolledComposite:

    sc1.setExpandHorizontal(true); 
    sc1.setExpandVertical(true); 
    
  3. Mise à jour la taille min dans l'auditeur:

    c1.layout(); 
    sc1.setMinSize(c1.computeSize(SWT.DEFAULT, SWT.DEFAULT)); 
    
+0

Dans ce cas, le 'ScrolledComposite' est juste redimensionné et aucune barre de défilement n'apparaît –

+0

@IliaAptsiauri J'ai ici des barres de défilement. – Baz

+0

Peut-être à cause du parent? –

0

Essayez de changer la mise en œuvre de l'auditeur.

scrolledComposite.addControlListener(new ControlAdapter() { 
      @Override 
      public void controlResized(ControlEvent e) { 
       scrolledComposite.setMinSize(cs1.computeSize(scrolledComposite.getClientArea().width, SWT.DEFAULT)); 
      } 
     });