gridlayout elemente auf ganze breite aufteilen

continue

Aktives Mitglied
in meiner view habe ich ein Group element welches ein gridLayout besitzt:
Code:
myGroup= new Group(parent, SWT.BORDER_SOLID);
myGroup.setLayout(new GridLayout(4, true));

jetzt ist es so dass die elemente nebeneinander reihe für reihe angereiht werden und die elemente im grid linksseitig ausgerichtet sind.
ich möchte aber dass die elemente so positioniert werden dass die breite der columns des grids auf die ganze breite der view/und somit der group ausgerichtet werden.
also statt
Code:
[_ _ _ _            ]
möchte ich gerne volgendes aussehen haben

Code:
[_     _     _     _]

gibt es da ein feld dass ich setzen muss? oder wie mach ich das?
 
S

SlaterB

Gast
vielleicht hast du ja eher
Code:
[_ _ _ _ ]
statt
Code:
[_ _ _ _            ]

wenn die enthaltenen Elemente groß sind, mag die Group von selber größer werden,
andersrum kommt man aber manchmal auch zum Ziel

deine Aufgabe wäre dann die Breite der ganzen Group zu erhöhen, was immer auch eine Group ist,
wo steckt die drin mit welchem Layout?
 

continue

Aktives Mitglied
Also mein Group element ist in der View im parent composite drin....

Java:
	public void createPartControl(Composite parent) {
		myGroup= new Group(parent, SWT.BORDER_SOLID);
		myGroup.setLayout(new GridLayout(4, true));

Die group hat eh schon die volle breite des views.
aber das grid wird nicht über die ganze breite verteilt, sondern liegen links an....
 
S

SlaterB

Gast
mir scheint jedenfalls, dass es am GridLayout selber nichts zu rütteln gibt,
was du mit 'View im parent composite' anstellen kannst, weiß ich leider nicht


How to Use GridLayout (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)
If the GridLayoutDemo window is resized, the GridLayout object changes the cell size so that the cells are as large as possible, given the space available to the container.



-----

> Die group hat eh schon die volle breite des views.

getestet mit Border, Hintergrundfarbe oder sonstwas?
oder weitergeleitet: wie groß ist die View, vielleicht ist die so klein
 

Koringar

Bekanntes Mitglied
Das GridLayout gibt nur die Grobe anordnung an, wenn du dies verfeinern willst, musst du mit GridData auf deinen Composites arbeiten oder dann eher die GridDataFactory. Dort gibt es dann auch das Attribut 'grab' was die Elemete so anordnet wie du es willst.

Ein Beispiel Grid Layout Complex : LayoutSWT JFace EclipseJava würde aber lieber mit der GridDataFactory arbeiten, viel angenehmer.
 

continue

Aktives Mitglied
> Die group hat eh schon die volle breite des views.

getestet mit Border, Hintergrundfarbe oder sonstwas?
oder weitergeleitet: wie groß ist die View, vielleicht ist die so klein



ja. Das Group element hat einen border. Der breitet sich über die gesammte Größe des Views aus.

Also der Code:
Java:
....
...
	public void createPartControl(Composite parent) {
		myGroup = new Group(parent, SWT.BORDER_SOLID);
		myGroup.setLayout(new GridLayout(2, true));

		Label lblopt = new Label(myGroup, SWT.LEFT);
		lblopt.setText("opt:");

	        groupopt= new Group(myGroup, SWT.LEFT);
		groupopt.setLayout(new GridLayout(1, false));
		btnopt1 = new Button(groupStatus, SWT.RADIO);
		btnopt1.setText("opt1");
		btnopt2 = new Button(groupStatus, SWT.RADIO);
		btnopt2.setText("opt2");
	}

das is eh im prinzip alles nur wird das ganze eben nicht auf die ganze breite verteilt....
 

Wildcard

Top Contributor
Java:
package swtstuff;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

public class GridLayoutDemo {

	GridLayoutDemo(){
		Shell shell = new Shell(SWT.RESIZE | SWT.CLOSE);
		shell.setSize(200, 200);
		shell.setLayout(new FillLayout());
		createPartControl(shell);
		shell.open();
		while(!shell.isDisposed())
		{
			if(!Display.getCurrent().readAndDispatch())
				Display.getCurrent().sleep();
		}
	}
	
    public void createPartControl(Composite parent) {
        Group myGroup = new Group(parent, SWT.BORDER_SOLID);
        GridLayoutFactory.swtDefaults().numColumns(4).equalWidth(true).applyTo(myGroup);
        for (int i = 0; i < 4; i++) {
			Label l = new Label(myGroup, SWT.NONE);
			l.setText(Integer.valueOf(i).toString());
			GridDataFactory.fillDefaults().grab(i==0, false).align(SWT.CENTER, SWT.CENTER).applyTo(l);
		}
        
    }
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new GridLayoutDemo();

	}

}
 
Zuletzt bearbeitet:

Ähnliche Java Themen


Oben