2012-10-17 9 views
8

W mojej aplikacji SWT mam pewne elementy wewnątrz powłoki SWT.Jak możemy automatycznie zmienić rozmiar komponentów w SWT?

Jak mogę automatycznie zmienić rozmiar tych komponentów zgodnie z rozmiarem okna wyświetlacza.

Display display = new Display(); 

Shell shell = new Shell(display); 
Group outerGroup,lowerGroup; 
Text text; 

public test1() { 
    GridLayout gridLayout = new GridLayout(); 
    gridLayout.numColumns=1; 
    shell.setLayout(gridLayout); 

    outerGroup = new Group(shell, SWT.NONE); 

    GridData data = new GridData(1000,400); 
    data.verticalSpan = 2; 
    outerGroup.setLayoutData(data);  

    gridLayout = new GridLayout(); 

    gridLayout.numColumns=2; 
    gridLayout.makeColumnsEqualWidth=true; 
    outerGroup.setLayout(gridLayout); 

    ... 
} 

tj kiedy zmniejszyć rozmiar okna elementy wewnątrz niej powinien pojawić się w zależności od tego.

+0

można słuchać Zdarzenie 'SWT.Resize' i wywołaj' layout() 'na komponentach – Alex

Odpowiedz

25

Brzmi to podejrzanie tak, jak nie używasz układów.

Cała koncepcja układów sprawia, że ​​martwienie się o zmianę rozmiaru jest zbędne. Układ zajmie się wielkością wszystkich jego komponentów.

Polecam przeczytać Eclipse article about layouts

kodzie mogą być łatwo usunięte. Nie ustawiaj wielkości poszczególnych komponentów, układ określi ich rozmiar. Jeśli chcesz, aby okno mieć predefiniowany rozmiar, ustawić rozmiar skorupy za:

public static void main(String[] args) { 
    Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.setLayout(new GridLayout(1, false)); 

    Group outerGroup = new Group(shell, SWT.NONE); 

    // Tell the group to stretch in all directions 
    outerGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
    outerGroup.setLayout(new GridLayout(2, true)); 
    outerGroup.setText("Group"); 

    Button left = new Button(outerGroup, SWT.PUSH); 
    left.setText("Left"); 

    // Tell the button to stretch in all directions 
    left.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

    Button right = new Button(outerGroup, SWT.PUSH); 
    right.setText("Right"); 

    // Tell the button to stretch in all directions 
    right.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

    shell.setSize(1000,400); 
    shell.open(); 

    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) 
      display.sleep(); 
    } 
    display.dispose(); 
} 

Przed rozmiaru:

Before resizing

Po zmianie rozmiaru:

After resizing

+0

+1 Świetna odpowiedź. –

+0

@GilbertLeBlanc Cheers mate. – Baz

+1

+1 dla SWT.FILL, Thanks @Baz .. – HDdeveloper

Powiązane problemy