【问题标题】:Wrapping text in Eclipse Wizard在 Eclipse 向导中换行
【发布时间】:2023-04-02 07:58:01
【问题描述】:

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

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

当向导显示时,它会尝试将整个文本放在一行中,并且它的窗口会根据需要占据尽可能多的位置。我想你可以想象它的样子。如果我手动将窗口大小调整为其原始大小,即没有标签时它将具有的大小,我会得到所需的结果。是否有实现此目的的良好做法?

【问题讨论】:

    标签: java eclipse wizard word-wrap eclipse-plugin


    【解决方案1】:

    您可以在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 属性设置为静态值,我想出的唯一方法是覆盖DialogPagesetVisible 方法。如果这样做,则需要将标签实例作为成员变量保留在类中。

    @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 事件对我不起作用。唯一可行的方法是覆盖DialogPagesetVisible 方法。请参阅我的更新答案。
    • 似乎运作良好。然而,复合材料和窗口边框之间的间距仍然是一个常数,对于真实文本,我必须将其设置为 22。但我想我必须忍受它,因为我不知道如何确定它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 2013-07-18
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多