SWT Suche passenden LayoutManager

hdi

Top Contributor
Hi,

also mit den SWT Layouts kenn ich noch immer nicht so aus..
Ich hab im Moment einen Dialog mit einem FillLayout, und darin ist ein Table.
Das passt auch wunderbar, es werden auch Scrollbalken angezeigt wenn die Daten im Table
zu groß sind.

Jetzt möchte ich aber unter den Table noch einen Button machen.

Hab zunächst einfach den Button noch geaddet ohne das Layout zu ändenr. Das Problem beim
FillLayout ist aber dass er die Komponenten ja gleich groß macht, d.h. mein Button ist
ungefähr 200 pixel hoch ^^

Dann hab ichs mit RowLayout (SWT.Vertical) versucht, aber entweder der Button passt sich der Breite
nach nicht dem Table an, oder der Table verliert irgendwie seine ScrollPane (also die Scrollbalken).

Also ich will dass der Table nach wie vor scrollable ist, aber halt darunter einen Button, der
von der Breite den kompletten Dialog einnehmen soll, allerdings von der Höhe nur so hoch ist wie es halt üblich ist für einen Button.

Was nehm ich da jetzt?

thx
 
Danke, mit GridLayout hab ichs auch schon versucht aber es scheint dass die Scrollbalken verschwinden sobald ich etwas anderes als das FillLayout nehme.
 
Der Scrollbalken sollte aber nicht verschwindne mit einem GridLayout, das wäre sehr merkwürdig...
GridLayout mit einer Spalte anlegen. Table kriegt GridData mit (SWT.FILL, SWT.FILL, true, true). Dann sollte das gehen.
 
Hier mal ein kleine Bsp. hab die wichtigsten Stellen mit TODO: gekennzeichnet.
Java:
package snippet;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Snippet001TableViewer {
	private class MyContentProvider implements IStructuredContentProvider {

		/* (non-Javadoc)
		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
		 */
		public Object[] getElements(Object inputElement) {
			return (MyModel[])inputElement;
		}

		/* (non-Javadoc)
		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
		 */
		public void dispose() {
			
		}

		/* (non-Javadoc)
		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
		 */
		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
			
		}
		
	}
	
	public class MyModel {
		public int counter;
		
		public MyModel(int counter) {
			this.counter = counter;
		}
		
		public String toString() {
			return "Item " + this.counter;
		}
	}
	
	public Snippet001TableViewer(Shell shell) {
		//TODO:
		shell.setLayout(new GridLayout(1,false));
		final TableViewer v = new TableViewer(shell);
		v.setLabelProvider(new LabelProvider());
		v.setContentProvider(new MyContentProvider());
		MyModel[] model = createModel();
		v.setInput(model);
		v.getTable().setLinesVisible(true);
		//TODO:
		GridDataFactory.swtDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(v.getTable());
		Button button = new Button(shell, SWT.PUSH);
		button.setText("Hallo");
		GridDataFactory.swtDefaults().grab(true, false).align(SWT.FILL, SWT.CENTER).applyTo(button);
	}
	
	private MyModel[] createModel() {
		MyModel[] elements = new MyModel[10];
		
		for( int i = 0; i < 10; i++ ) {
			elements[i] = new MyModel(i);
		}
		
		return elements;
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Display display = new Display ();
		Shell shell = new Shell(display);
		shell.pack();
		new Snippet001TableViewer(shell);
		shell.setSize(200,100);
		
		while (!shell.isDisposed ()) {
			if (!display.readAndDispatch ()) display.sleep ();
		}
		
		display.dispose ();

	}

}
 

Neue Themen


Zurück
Oben