Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带包装文本的垂直滚动组合_Java_Swt - Fatal编程技术网

Java 带包装文本的垂直滚动组合

Java 带包装文本的垂直滚动组合,java,swt,Java,Swt,我正在尝试创建一个垂直滚动框,其中包含多标签小部件中的文本,但是 我似乎可以得到标签文字包装在所有 我已经把它缩小到这个最小的例子来复制这个问题 import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.FillLayout; import org.eclipse

我正在尝试创建一个垂直滚动框,其中包含多标签小部件中的文本,但是 我似乎可以得到标签文字包装在所有

我已经把它缩小到这个最小的例子来复制这个问题

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

public class Main {
    public static void main(String[] args) {
        // Create window.
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setText("Test");
        shell.setSize(320, 240);
        shell.setLayout(new FillLayout());

        // Create scroll container.
        final ScrolledComposite scrollContainer = new ScrolledComposite(shell, SWT.V_SCROLL | SWT.BORDER);

        // Create scroll area.
        final Composite scrollArea = new Composite(scrollContainer, SWT.NONE);
        scrollArea.setLayout(new RowLayout(SWT.VERTICAL));

        // Setup scrolling.
        scrollContainer.setExpandHorizontal(true);
        scrollContainer.setExpandVertical(true);
        scrollContainer.addListener(SWT.Resize, (event) -> {
            int width = scrollContainer.getClientArea().width;
            Point size = scrollArea.computeSize(width, SWT.DEFAULT);
            scrollContainer.setMinSize(size);
            System.out.println("Size: " + size.x + "x" + size.y);
        });
        scrollContainer.setContent(scrollArea);

        // Create paragraph.
        Label paragraph = new Label(scrollArea, SWT.WRAP);
        paragraph.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");

        // Display window.
        //shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }
}
当我运行此命令时,记录的大小将为316x23,因此宽度看起来正确,但 高度仅计算为适合一条线。如果我加入一个
shell.pack()
shell.open()
之前,记录的大小为2648x23,窗口会反射 那个尺寸。但是,当我缩小它时,文本仍然不会换行。你怎么 是否正确设置垂直滚动和换行文本?我
怀疑滚动区域的宽度没有传播到其子段落。

我认为您使用的
行布局
没有处理包装标签的问题。使用
GridLayout
标签的宽度提示似乎有效:

// Create scroll area.
final Composite scrollArea = new Composite(scrollContainer, SWT.NONE);
scrollArea.setLayout(new GridLayout());

// Setup scrolling.
scrollContainer.setExpandHorizontal(true);
scrollContainer.setExpandVertical(true);

// Create paragraph.
final Label paragraph = new Label(scrollArea, SWT.WRAP);
paragraph.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");

// Layout data for label, width a bit smaller than the shell
final GridData data = new GridData(SWT.LEAD, SWT.TOP, false, false);
data.widthHint = shell.getSize().x - 10;
paragraph.setLayoutData(data);

// Can do compute size immediately
final Point size = scrollArea.computeSize(SWT.DEFAULT, SWT.DEFAULT);
scrollContainer.setMinSize(size);
System.out.println("Size: " + size.x + "x" + size.y);

scrollContainer.setContent(scrollArea);
另一种方法是使用只读的
文本
控件,并指定滚动条-这不需要在
滚动组合
中。所有上述内容将替换为:

final Text paragraph = new Text(shell, SWT.WRAP | SWT.V_SCROLL | SWT.H_SCROLL);
paragraph.setEditable(false);
paragraph.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");

为了支持窗口调整时的文本换行,我更新了调整大小侦听器中的宽度提示


谢谢,这给了我需要的方向。
// Create scroll container.
final ScrolledComposite scrollContainer = new ScrolledComposite(shell, SWT.V_SCROLL | SWT.BORDER);
scrollContainer.setExpandHorizontal(true);
scrollContainer.setExpandVertical(true);

// Create scroll area.
final Composite scrollArea = new Composite(scrollContainer, SWT.NONE);
final GridLayout scrollLayout = new GridLayout();
scrollArea.setLayout(scrollLayout);

// Create paragraph.
Label paragraph = new Label(scrollArea, SWT.WRAP);
paragraph.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");
final GridData paragraphData = new GridData(SWT.LEAD, SWT.TOP, false, false);
paragraph.setLayoutData(paragraphData);

// Setup scrolling.
scrollContainer.addListener(SWT.Resize, (event) -> {
  int width = scrollContainer.getClientArea().width;
  paragraphData.widthHint = width - scrollLayout.marginWidth; // Add padding to right.
  Point size = scrollArea.computeSize(SWT.DEFAULT, SWT.DEFAULT);
  scrollContainer.setMinSize(size);
});

scrollContainer.setContent(scrollArea);