gpt4 book ai didi

java - SWT ScrolledComposite 在调整大小后无法正确显示内容

转载 作者:太空宇宙 更新时间:2023-11-04 09:11:13 26 4
gpt4 key购买 nike

我想要一个包含多个组合的 ScrolledComposite

如果调整窗口大小,则 ScrolledComposite 无法正确调整大小。如果我缩小宽度,它将切断内容的底部,并且不允许用户向下滚动足够多的内容。如果我随后将宽度增加到更大,它将始终保留滚动条并允许用户向下滚动太远。

我尝试更新 ScrolledComposite 的最小高度,如 this 中的答案问题但没有帮助。我尝试遵循多个教程并查看示例,但我看不出是什么原因造成的。

示例

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();
}
}

是什么原因造成的?

最佳答案

我设法通过添加一个用于 ScrolledComposite 大小变化的监听器来解决这个问题。

如果调整了 ScrolledComposite 的大小,我将获取客户区域宽度并计算内容所需的最小大小。

scrolledComposite.addListener(SWT.Resize, event -> {
final int width = scrolledComposite.getClientArea().width;
scrolledComposite.setMinSize(content.computeSize(width, SWT.DEFAULT));
});

关于java - SWT ScrolledComposite 在调整大小后无法正确显示内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59646525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com