2013-10-13 3 views
2

У меня есть GridLayout внутри Composite, и у меня есть две колонки внутри. Я хочу иметь ширину столбца 75% и 25% от ширины Shell. Как это сделать?Установка ширины столбцов GridLayout

+1

Это не очень легко достичь с помощью 'GridLayout ', но есть много других' Layout'. Посмотрите на [это] (http://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html), особенно часть о 'FormLayout'. – Baz

+0

Привет, спасибо за ответ. Я знаю о другом макете, но хочу его в макете. Причина в том, что когда я изменяю размер оболочки/композицию или перемещаю ее справа налево (по горизонтали), тогда ширина 2-го столбца остается постоянной до тех пор, пока первый не будет полностью свернут. Спасибо за поддержку. – Jack

ответ

5

Справа, здесь вы идете: Используйте значения GridData#widthHint, чтобы заставить определенную ширину Composite s. Рассчитайте ширину на основе ширины Shell:

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

    Composite left = new Composite(shell, SWT.BORDER); 
    Composite right = new Composite(shell, SWT.BORDER); 

    final GridData leftData = new GridData(SWT.FILL, SWT.FILL, true, true); 
    final GridData rightData = new GridData(SWT.FILL, SWT.FILL, true, true); 

    left.setLayoutData(leftData); 
    right.setLayoutData(rightData); 

    shell.addListener(SWT.Resize, new Listener() 
    { 
     @Override 
     public void handleEvent(Event arg0) 
     { 
      Point size = shell.getSize(); 

      leftData.widthHint = (int) (size.x * 0.75); 
      rightData.widthHint = size.x - leftData.widthHint; 

      System.out.println(leftData.widthHint + " + " + rightData.widthHint + " = " + size.x); 
     } 
    }); 

    shell.pack(); 
    shell.open(); 
    shell.layout(); 

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

После старта:

enter image description here

После изменения размера:

enter image description here

+0

Привет, спасибо за ответ. мои вопросы были немного неправильными. после повторной калибровки вторая ширина столбца не должна вообще меняться. предположим, что в начале ширина столбца равна 400 пикселям, а после переопределения она должна оставаться 400, но ширина первого столбца может измениться до 0, но вторая длина столбца не должна меняться. Спасибо за вашу помощь. – Jack

+0

@Jack Это должно быть достаточно легко изменить самостоятельно, правильно;)? Если нет, сообщите мне, и я могу обновить свой ответ. – Baz

+0

Большое спасибо Baz !! – Jack

Смежные вопросы