Quiero crear un diseño de detalles maestros para una de mis aplicaciones mediante SWT.SWT: diseños anidados con ScrolledComposite excede el espacio disponible
Contenedor, Contenido, Barra lateral y Parte1 son instancias compuestas. Scrolled es un ScrolledComposite
El diseño deseado es algo así como:
+--Container-------------------------------------+
|+--Content----------------------++--Sidebar----+|
|| ||+--Part1----+||
|| ||| |||
|| ||| |||
|| ||| |||
|| ||| |||
|| ||| |||
|| ||+-----------+||
|| ||+--Scrolled-+||
|| ||| |||
|| ||| |||
|| ||| |||
|| ||| |||
|| ||| |||
|| ||+-----------+||
|+-------------------------------++-------------+|
+------------------------------------------------+
el contenido debe agarrar todo el espacio horizontal y vertical que está disponible.
La barra lateral es básicamente un contenedor para Part1 y Scrolled que debe tener la misma altura.
Scrolled es el contenedor de un compuesto que contiene un número dinámico de elementos secundarios que están dispuestos en el compuesto de contenido. Debido a que puede haber una gran variación en el número de subtemas, este compuesto debe ser desplazable.
he implementado ahora esto de la siguiente manera:
contenedor tiene un GridLayout con 2 columnas.
Dentro de eso, el contenido tiene un comportamiento de FILL_BOTH y atrapa todo el espacio HORIZONTAL/VERTICAL.
La barra lateral tiene un FillLayout (SWT.VERTICAL) y contiene Part1 y Childs desplazados.
Problema: Al poner una gran cantidad de artículos en el material compuesto desplazado y la disposición a punto de desbordar el espacio disponible y no hay desplazamiento disponibles donde tiene que estar.
Cuando uso FillLayout (SWT.HORIZONTAL) para el contenedor, el comportamiento es el deseado, ya que hay un desplazamiento y todo está "dentro de límites".
Hay una manera de lograr este comportamiento también cuando uso un GridLayout porque quiero que el contenido ocupe la mayor parte del espacio.
Attached la corriente fragmento SWT prueba:
public class Scrolled {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(2,false));
//shell.setLayout(new FillLayout(SWT.HORIZONTAL));
Composite content = new Composite(shell, SWT.BORDER);
content.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
Composite sidebar = new Composite(shell, SWT.BORDER);
sidebar.setLayout(new FillLayout(SWT.VERTICAL));
sidebar.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
Composite cc = new Composite(sidebar, SWT.BORDER);
ScrolledComposite sc = new ScrolledComposite(sidebar, SWT.BORDER
| SWT.V_SCROLL | SWT.H_SCROLL);
sc.setLayout(new GridLayout(1,true));
Composite c = new Composite(sc, SWT.NONE);
c.setSize(400, 400);
c.setLayout(new GridLayout(1, true));
for(int i = 0; i < 1000; i++){
new Button(c, SWT.PUSH).setText("Text");
}
sc.setMinSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT));
sc.setContent(c);
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
sc.setAlwaysShowScrollBars(true);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}