2013-02-20 12 views
6

mam SWT kreatora stronę jako mojego macierzystego powłoki, do tworzenia innej powłoki na kliknięcie przycisku piszę następujący kodwytwarzający powłoki SWT w centrum jego rodzica powłoki

Shell permissionSetShell = new Shell(Display.getCurrent().getActiveShell(), SWT.CENTER|SWT.DIALOG_TRIM|SWT.APPLICATION_MODAL); 
permissionSetShell.setText(PropertyClass.getPropertyLabel(QTLConstants.PERMISSION_SET_COLUMN_LABEL)); 

// Add shell to the center of parent wizard 
permissionSetShell.setLayout(componentsRenderer.createGridLayout(1, false, 0, 5, 0, 0));  
Monitor primary = Display.getCurrent().getPrimaryMonitor(); 
Rectangle bounds = primary.getBounds(); 
Rectangle rect = Display.getCurrent().getActiveShell().getBounds(); 
int x = bounds.x + (bounds.width - rect.width)/2; 
int y = bounds.y + (bounds.height - rect.height)/2;    
permissionSetShell.setLocation (x, y); 

lecz jako powłoka dziecko oznacza to, powłoka nie jest umieszczona w środku kreatora SWT, który jest powłoką rodzica, dlaczego?

+0

Czy sprawdziłeś, czy 'bounds' i' rect' rzeczywiście zawierają poprawne informacje? – Baz

+0

Baza, tak, zawiera informacje –

+0

Ale czy informacje są poprawne? – Baz

Odpowiedz

7
Rectangle screenSize = display.getPrimaryMonitor().getBounds(); 
shell.setLocation((screenSize.width - shell.getBounds().width)/2, (screenSize.height - shell.getBounds().height)/2); 
1

Jeśli piszesz okno lub składnik dziecko może chcesz użyć getParent zamiast pytać wyświetlanie na monitorze podstawowym tak, że okno jest wyśrodkowany na bieżącym ekranie dla wielu ustawień monitora.

Rectangle parentSize = getParent().getBounds(); 
Rectangle shellSize = shell.getBounds(); 
int locationX = (parentSize.width - shellSize.width)/2+parentSize.x; 
int locationY = (parentSize.height - shellSize.height)/2+parentSize.y; 
shell.setLocation(new Point(locationX, locationY)); 
+0

Mój problem dokładnie, to powinna być akceptowana odpowiedź, ponieważ obecnie wiele konfiguracji monitora nie jest rzadkością, a "+ parentSize.x;" jest kluczowa i brakuje jej w drugiej odpowiedzi. –

0

Myślę, że najlepiej byłoby użyć stylu SWT.SHEET dla takiego okna dialogowego.