GXT / GWT - как обнаружить текст метки займет слишком много места. (не помещается в одну строку) - PullRequest
1 голос
/ 15 ноября 2011

Я работаю над веб-приложением в GXT.

Мне нужен способ определить, во время выполнения, является ли текст на этикетке слишком большим, и показать что-то вроде: нажмите, чтобы просмотреть весь текст (корочетекст может быть).

Тогда весь текст будет отображаться во всплывающем окне.

Я не знаю, как я могу сказать, что текст не будет соответствовать.Должен ли я приблизиться по количеству букв, скажем, мой контейнер имеет ширину 400 пикселей, и у меня есть 50-буквенный текст, я могу назначить среднюю ширину для каждой буквы, например, 7 пикселей / буква?

Есть ли у вас какие-либопредложения?Возможно, уже есть компонент, который делает это.

Спасибо.

РЕДАКТИРОВАТЬ:

В одной части приложения мои ярлыки находятся в FlexTable,Я думал о том, чтобы пройти через ячейки FlexTable и получить высоту каждой ячейки, и, если высота превышает одну нормальную высоту строки (20 пикселей?), Обрезать метку.

Вопрос: как мне получитьвысота ячейки FlexTable?Или высота строки FlexTable?

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Посмотрите на класс TextMetrics: com.extjs.gxt.ui.client.util.TextMetrics

Это пост-рендеринг, поэтому вам придется ретранслировать, если необходимо

0 голосов
/ 16 ноября 2011

ОК, ребята, надеюсь, это кому-нибудь поможет, вот и все:

FlexTable находится в LayoutContainer (я знаю, что смешивать компоненты GXT и GWT - не самая яркая идея, но у меня нет компонента FlexTable в GXT).

Это рекурсивно обрезает надписи по 10 символов за раз, пока они не будут перенесены на второй ряд. Это также добавит всплывающую подсказку к метке.

@Override
protected void onAfterLayout() {
    super.onAfterLayout();
    boolean reLayoutNeeded = false;
    for (int rowIterator = 0; rowIterator < table.getRowCount(); rowIterator++) {
        int cellCount = table.getCellCount(rowIterator);
        for (int currentCell = 0; currentCell < cellCount; currentCell++) {
            Widget currentWidget = table.getWidget(rowIterator, currentCell);
            Label label = (Label) currentWidget;
            if (currentWidget.getOffsetHeight() > MAXIMUM_ROW_HEIGHT) {
                if (label.getToolTip() == null) {
                    label.setToolTip(label.getText());
                }
                label.setText(label.getText().substring(0, label.getText().length() - 10) + "...");
                table.setWidget(rowIterator, currentCell, label);
                reLayoutNeeded = true;
            }
        }
    }

    if (reLayoutNeeded) {
        layout(true);
    }
}
...