2013-07-07 8 views
16

Ho bisogno di nascondere un composito (e tutti i bambini all'interno). Basta impostare setVisible(false) per mantenere lo spazio del composito.Come nascondere un composito SWT in modo che non occupi spazio?

Composite outer = new Composite(parent, SWT.NONE);  
outer.setLayout(new GridLayout(1,false)); 
outer.setLayoutData(new GridData(GridData.FILL_BOTH)); 

Composite compToHide = new MyComposite(outer, SWT.NONE);   
compToHide.setLayout(new GridLayout()); 
compToHide.setVisible(false); 
+0

soluzione è simile a http : //stackoverflow.com/questions/17511442/eclipse-plugin-make-co mbo-to-handle-enter-key ie addListener() –

risposta

18

Ecco un codice che fa ciò che vuoi. Io fondamentalmente uso GridData#exclude in combinazione con Control#setVisible(boolean) per nascondere/visualizzare l'Composite:

public static void main(String[] args) 
{ 
    Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setText("StackOverflow"); 
    shell.setLayout(new GridLayout(1, true)); 

    Button hideButton = new Button(shell, SWT.PUSH); 
    hideButton.setText("Toggle"); 

    final Composite content = new Composite(shell, SWT.NONE); 
    content.setLayout(new GridLayout(3, false)); 

    final GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); 
    content.setLayoutData(data); 

    for(int i = 0; i < 10; i++) 
    { 
     new Label(content, SWT.NONE).setText("Label " + i); 
    } 

    hideButton.addListener(SWT.Selection, new Listener() 
    { 
     @Override 
     public void handleEvent(Event arg0) 
     { 
      data.exclude = !data.exclude; 
      content.setVisible(!data.exclude); 
      content.getParent().pack(); 
     } 
    }); 

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

prima di nascondere:

enter image description here

dopo aver nascosto:

enter image description here

+0

il problema è con shell.pack(), non posso usarlo perché riguarda l'intero gui – yuris

+0

@yuris Puoi usare 'pack()' sul genitore di il composito che stai cercando di nascondere? Se è così, guarda il mio codice aggiornato. In caso contrario, sarà necessario ridurre manualmente la dimensione della shell in base alla dimensione del composito nascosto. – Baz

+2

E riguardo 'content.getParent(). Layout (true, true)'? – winklerrr

Problemi correlati