Я хотел бы иметь ScrolledComposite
, в котором есть несколько композитов.
Если размер окна изменяется, ScrolledComposite
изменяет размер неправильно. Если я уменьшу ширину, это отключит нижнюю часть содержимого и не позволит пользователю прокрутить достаточно вниз. Если я затем увеличу ширину до гораздо большей, она всегда будет держать полосу прокрутки и позволит пользователю прокручивать слишком далеко вниз.
Я пытался обновить минимальную высоту ScrolledComposite
, как ответ в этом вопросе, но это не помогло. Я пытался следовать нескольким учебникам и смотреть на примеры, но я не понимаю, что является причиной этого.
Пример
import org.apache.commons.lang3.StringUtils;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
public class Example {
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("Scrolled Composite Example");
// Create a scrolled composite with content
shell.setLayout(new GridLayout(1, true));
shell.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
final Composite scrollParent = new Composite(shell, SWT.NONE);
scrollParent.setLayout(new FillLayout());
scrollParent.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).span(1, 1).create());
final ScrolledComposite scrollComposite = new ScrolledComposite(scrollParent, SWT.V_SCROLL);
final Composite scrollContent = new Composite(scrollComposite, SWT.NONE);
scrollContent.setLayout(new GridLayout(1, true));
scrollComposite.setContent(scrollContent);
scrollComposite.setExpandHorizontal(true);
scrollComposite.setExpandVertical(true);
// Add a composite to the scroll content (A label with lots of text)
final Composite cell = new Composite(scrollContent, SWT.BORDER);
cell.setLayout(new GridLayout(4, false));
cell.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
final Label l = new Label(cell, SWT.WRAP);
l.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
l.setText(StringUtils.repeat('1', 10000));
// Listen for width changes to update the minimum height
scrollContent.addListener(SWT.Resize, new Listener() {
int width = -1;
@Override
public void handleEvent(final Event e) {
int newWidth = scrollContent.getSize().x;
if (newWidth != width) {
scrollComposite.setMinHeight(scrollContent.computeSize(newWidth, SWT.DEFAULT).y);
width = newWidth;
}
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
Что вызывает это?