Как обернуть длинную текстовую метку в более короткую? - PullRequest
0 голосов
/ 09 февраля 2020

Я получил две метки в диалоге JFace. Один с коротким текстом, другой с длинным текстом. Я хотел бы, чтобы более длинный текст был перенесен, если его длина превышает длину короткого текста (который не следует переносить).

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

public class TestDialog {

    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);

        MyTestDialog dialog = new MyTestDialog(shell);
        dialog.open();

        shell.dispose();

        while (!shell.isDisposed()) {
          if (!display.readAndDispatch())
            display.sleep();
        }
        display.dispose();
    }
}

class MyTestDialog extends Dialog {

    public MyTestDialog(Shell parent) {
        super(parent);
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        Composite container = (Composite) super.createDialogArea(parent);
        container.setLayoutData(new GridData(SWT.NONE, SWT.TOP, true, false));

        Label lbl1 = new Label(container, SWT.NONE);
        GridData lbl1griddata = new GridData(SWT.CENTER, SWT.CENTER, false, false);
        lbl1.setLayoutData(lbl1griddata);
        lbl1.setText("This is a short text. Shorter than the other.");

        Label lbl2 = new Label(container, SWT.WRAP);
        lbl2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        lbl2.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.");

        return container;
    }
}

1 Ответ

0 голосов
/ 09 февраля 2020

Я думаю, вам нужно будет определить длину текста первой надписи и использовать ее в качестве подсказки ширины для второго макета надписи, чтобы сделать это:

Label lbl1 = new Label(container, SWT.NONE);
GridData lbl1griddata = new GridData(SWT.CENTER, SWT.CENTER, false, false);
lbl1.setLayoutData(lbl1griddata);
lbl1.setText("This is a short text. Shorter than the other.");

GC gc = new GC(lbl1.getDisplay());
int width = gc.textExtent(lbl1.getText()).x;
gc.dispose();

Label lbl2 = new Label(container, SWT.WRAP);
GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false);
data.widthHint = width;
lbl2.setLayoutData(data);
lbl2.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.");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...