RCP 2 kompozyty w jednym - jak ustawic ich rozmiary?

Witam,

Mam widok, w ktorym mam wrzucony kompozyt A o wielkosci dokladnie calego widoku.

Teraz chcialbym w ten kompozyt wrzucic 2 inne kompozyty B i C tak, zeby B zajmowal 2/3 szerokosci kompozytu A, a C reszte, czyli 1/3, niezaleznie od wielkosci okna calej aplikacji. Ktos moze wie, jak to zrobic?

Sprawa niby prosta, a jednak trudna...

//Kompozyt A:
Composite mainComposite = new Composite(parent, SWT.NONE);
GridData mainLayoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
mainLayoutData.horizontalSpan = 1;
mainComposite.setLayoutData(mainLayoutData);
GridLayout mainLayout = new GridLayout(3, false);
mainLayout.marginWidth = 0;
mainLayout.marginHeight = 0;
mainComposite.setLayout(mainLayout);

//Kompozyt B:
Composite subCustomerComposite = new Composite(mainComposite, SWT.NONE);
GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
layoutData.horizontalSpan = 1;
subCustomerComposite.setLayoutData(layoutData);
GridLayout layout = new GridLayout(2, false);
subCustomerComposite.setLayout(layout);

//Kompozyt C:
Composite subCustomerComposite2 = new Composite(mainComposite, SWT.NONE);
GridData layoutData2 = new GridData(SWT.FILL, SWT.FILL, true, true);
layoutData2.horizontalSpan = 1;
subCustomerComposite2.setLayoutData(layoutData);
GridLayout layout2 = new GridLayout(1, false);
subCustomerComposite2.setLayout(layout2);

Opcje przeglądania komentarzy

Wybierz preferowany sposób wyświetlania komentarzy i klinij na "Zapisz ustawienia", aby aktywować zmiany.
ant's picture

możesz dodać ControlListener

możesz dodać ControlListener do kompozytu nadrzędnego. Coś na kształt:

A.addControlListener(new ControlAdapter() {
	@Override
	public void controlResized(ControlEvent e) {
		Composite composite = (Composite) e.widget;
		int width = composite.getBounds().width;
		((GridData) B.getLayoutData()).widthHint = (int) (0.66 * width);
		((GridData) C.getLayoutData()).widthHint = (int) (0.33 * width);
	}
});

--
piotr maj

Dzieki za wskazowke

Dzieki za wskazowke :)

Dodalem taki listener i na debug mode widze, ze ta metoda sie wykonuje, ale w aplikacji nic sie nie zmienia - nadal oba kompozyty B i C zajmuja po polowie kompozytu A.

Czy trzeba zrobic cos jeszcze? Dolozylem B.redraw() i C.redraw(), ale nie pomoglo.

ant's picture

aaa, już widzę co może być

aaa, już widzę co może być nie tak:

jest:
subCustomerComposite2.setLayoutData(layoutData);

powinno być:
subCustomerComposite2.setLayoutData(layoutData2);

ant's picture

panel A powinien sam się

panel A powinien sam się odrysować. Możesz ewentualnie spróbować A.layout(), ale nie powinno być to konieczne. Jak byś przesłał kompilujący się kod, gdzie problem występuje mógłbym sprawdzić dokładniej co jest nie tak.

afff rzeczywiscie :) Blad

afff rzeczywiscie :) Blad copy/paste. Teraz dziala.

Wielkie dzieki i wesolych swiat :)