Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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 在Eclipse向导中包装文本_Java_Eclipse_Wizard_Word Wrap_Eclipse Plugin - Fatal编程技术网

Java 在Eclipse向导中包装文本

Java 在Eclipse向导中包装文本,java,eclipse,wizard,word-wrap,eclipse-plugin,Java,Eclipse,Wizard,Word Wrap,Eclipse Plugin,Eclipse向导根据向导最大页面的大小计算其窗口的大小。这就是为什么我在制作标签以将其文本包装在页面中时遇到困难的原因。我使用以下代码段创建包装标签: @Override public void createControl(Composite parent) { initializeDialogUnits(parent); Composite composite = new Composite(parent, SWT.NONE); composite.setFont(p

Eclipse向导根据向导最大页面的大小计算其窗口的大小。这就是为什么我在制作标签以将其文本包装在页面中时遇到困难的原因。我使用以下代码段创建包装标签:

@Override
public void createControl(Composite parent)
{
    initializeDialogUnits(parent);
    Composite composite = new Composite(parent, SWT.NONE);
    composite.setFont(parent.getFont());
    composite.setLayout(initGridLayout(new GridLayout(3, false), true));
    composite.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));

    Label l = new Label(composite, SWT.WRAP);
    l.setText("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut"
                    + "labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo"
                    + "duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum"
                    + "dolor sit amet.");
    l.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 3, 1));

    // create other components

    setControl(composite);
}
当向导出现时,它会尝试将整个文本放在一行中,其窗口会占据所需的位置。我想你可以想象它的样子。如果我手动将窗口大小调整为其原始大小,即如果没有标签,它将具有的大小,则会得到所需的结果。是否有实现这一目标的良好实践


您可以在
GridData
实例上设置
widthHint
属性。这不是一个完美的解决方案,但可能有助于:

Label l = new Label(composite, SWT.WRAP);
l.setText("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut"
                + "labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo"
                + "duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum"
                + "dolor sit amet.");
GridData gd = new GridData(SWT.FILL, SWT.NONE, true, false, 3, 1);
l.setLayoutData(gd);
如果您不将
widthHint
属性设置为静态值,那么我找到的唯一方法就是重写
对话框页面的
setVisible
方法。如果这样做,则需要将label实例保留为类中的成员变量

@Override
public void setVisible(boolean visible) {
    int widthHint = getControl().getSize().x - 16;

    l.setText("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut"
              + "labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo"
              + "duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum"
              + "dolor sit amet.");
    ((GridData)l.getLayoutData()).widthHint = widthHint;

    getControl().pack();

    super.setVisible(visible);
}

希望对您有所帮助。

要设置正确的分辨率独立于
widthHint
,我需要知道向导窗口的宽度,它只能在创建窗口后确定。因此,我想我必须捕获
SWT.MeasureItem
或覆盖
setVisible
以获得窗口大小并设置适当的
widthHint
。对吧?SWT.MeasureItem事件对我不起作用。唯一可行的方法是覆盖
对话框页面
setVisible
方法。查看我的最新答案。似乎效果不错。但是,组合框和窗口边框之间的间距仍然是一个常量,对于真实文本,我必须将其设置为22。但我想我必须忍受它,因为我不知道如何确定它。