SWT / JFace Tooltip для управления текстом, когда текст в контроле слишком велик для отображения - PullRequest
1 голос
/ 01 февраля 2012

Я знаю, что это может быть реализовано довольно легко, но я должен использовать стандартную функциональность для этого.Мне нужно, чтобы всплывающая подсказка отображалась в текстовом поле, но только тогда, когда текст в текстовом поле должен быть длинным, чтобы отображаться в поле.Таблицы и дерево имеют эту функцию при изменении размера столбцов, но я не нашел ничего похожего для текстовых полей.

Мне также не удалось найти эту функцию в Eclipse, поэтому я предполагаю, что это не стандартная функциональность.Пожалуйста, докажите, что я не прав:).

Заранее спасибо.

1 Ответ

3 голосов
/ 02 февраля 2012

Что значит "Стандартная функциональность" ..?Добавление modifyListener к Text экземпляру является (imo) достаточно справедливым стандартом.

Вот мой подход

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;


public class TextLabel {
    public TextLabel() {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout(new GridLayout());
        shell.setSize(200, 150);
        shell.setText("Long Text content label");

        Text txtLong = new Text(shell, SWT.SINGLE | SWT.BORDER);
        txtLong.addModifyListener(new ModifyListener() {

            @Override
            public void modifyText(ModifyEvent e) {
                Text txtSource = (Text) e.getSource();
                Point size = (new GC(txtSource)).stringExtent(txtSource.getText());
                if(size.x > txtSource.getBounds().width - txtSource.getBorderWidth()) txtSource.setToolTipText(txtSource.getText());
                else txtSource.setToolTipText(null);
            }
        });

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

    public static void main(String args[]) {
        new TextLabel();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...