SWT - Как вы изменяете размер / устанавливаете размер Composite, находящегося в другом композите? - PullRequest
2 голосов
/ 13 декабря 2011

// У меня есть композит внутри прокручиваемого композита.

final Composite c = new Composite(scrolledComposite, SWT.NONE); //1
c.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
c.setLayout(new GridLayout(1, false));

// У меня есть цикл for, который добавляет композиты в композитный c

for(int i = 0; i<100; i++){ 

    Composite b = new Composite(c, SWT.BORDER);
    b.setBackground(SWTResourceManager.getColor(SWT.COLOR_LIST_SELECTION));
    b.setLayout(new GridLayout(2, false));
    b.setBounds(112, 70, 268, 69);

//, а затем некоторыеКонтроллеры, добавленные к этому внутреннему составному элементу

    Label lblNewLabel_2 = new Label(b, SWT.NONE);
    lblNewLabel_2.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 4));
    Image img = new Image(Display.getCurrent(), result.get(i).getPicturePath());


//.... more controllers.

// Наконец, я заканчиваю цикл и добавляю самый внешний составной элемент к прокручиваемому составному элементу.

} // end loop           
    scrolledComposite.setContent(c); //setter content!
    scrolledComposite.setMinSize(c.computeSize(SWT.DEFAULT, SWT.DEFAULT));

Все это прекрасно работает, почти.Моя проблема заключается в том, что внутренний композит не будет отвечать на метод setBounds.Неважно, что я пишу в нем, я не могу заставить его расширяться.Я подозреваю, что это как-то связано с макетами.

Кто-нибудь получил подсказку?

Заранее спасибо.

Петтер

Ответы [ 2 ]

3 голосов
/ 14 декабря 2011

Макеты - это объекты, которые устанавливают размер и местоположение дочерних составных объектов, поэтому вам не придется вызывать setBounds() для каждого из них. Проверьте Понимание макетов в SWT .

Какова цель Layout в приложениях SWT?

0 голосов
/ 24 декабря 2011

Рассмотрите слушателя Resize на вашей внешней панели, чтобы он настраивал вашу внутреннюю панель.

_outerPanel.addListener(SWT.Resize, new Listener() {
    public void handleEvent(Event e) {
        computePanelSize();  // computes the inner panel size
    }
});
...