java - tutorial - swt vs swing
¿Cómo ocultar un compuesto SWT para que no ocupe espacio? (2)
Necesito ocultar un compuesto (y todos los niños dentro). Solo configurando setVisible(false)
mantendrá el espacio del compuesto.
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);
Aquí hay un código que hace lo que quieres. Básicamente, uso GridData#exclude
en combinación con Control#setVisible(boolean)
para ocultar / mostrar el Composite
:
public static void main(String[] args)
{
Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("");
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();
}
Antes de esconderse:
Después de esconderse:
Defina un GridData para su control y luego, después de que lo haga: control.setVisible(false)
do gridData.exclude=true