Уменьшите длину текста, чтобы она подходила под ширину ячейки - PullRequest
3 голосов
/ 09 июня 2010

Я нахожусь в проекте, где мы создаем простой веб-календарь с использованием технологий Java EE.

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

Проблема в том, что иногда текст в ячейках становится больше, чем фактическая ячейка.Моя задача состоит в том, чтобы сделать текст более «читабельным», уменьшив его длину «умным способом», чтобы он мог вписаться в ячейку более «изящно».

Например, если изначально в ячейке у меня есть:«Написание документов», после изменения размера я должен получить: «Wrtng. Dcmnts» или «Writ. Docum».так что текст может хорошо вписаться.

Есть ли умный способ сделать это?Или достаточно убрать вокал / разбить струну на две части?

Ответы [ 6 ]

2 голосов
/ 09 июня 2010

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

... * пишет 1004 *

в клетке,

Написание документов

во всплывающей подсказке.

Таким образом, ваша программа также будет работать хорошо для международного использования, и требования к пространству для хранения нескольких версий одних и тех же строк исчезнут.

2 голосов
/ 09 июня 2010

Если вы не можете хранить сокращения, вы, вероятно, застрянете с некоторыми правилами, такими как:

if the string is too long
  remove the two rightmost vowels and append a .
  do while the string is too long and there are any vowels left
     remove vowels one at a time from the right
  do while the string is too long
     remove a consonant from the right end of the rightmost word
     if the string is still too long
         remove a consonant from the last word but one
         ...

Вы понимаете, это неловко, но не ракетостроение.

Вы можете комбинировать это с набором правил перезаписи для общих слов и для общих групп букв. Например:

customer -> custmr -> cust -> cst
ation -> tn

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

1 голос
/ 09 июня 2010

Для меня наличие переменных сокращений совсем нехорошо - это может привести к двусмысленности, что, в свою очередь, может привести к неправильным интерпретациям и неправильным решениям.

Типичный подход (из описаний транзакций в бухгалтерских / финансовых системах) состоит в том, чтобы иметь возможность создавать и поддерживать словарь сокращений. (Это также может помочь с проверкой или преобразованием ввода данных, а не только для представления результатов).

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

Кроме того, у вас должен быть одинаковый способ показать, какие клетки были обрезаны.

1 голос
/ 09 июня 2010

В Perl есть Lingua :: EN :: Squeeze, но этот алгоритм, кажется, не производит ужасно читаемый текст;http://search.cpan.org/~jariaalto/Lingua-EN-Squeeze-2006.0704/Squeeze.pm

Вы можете попробовать SMS Speak;http://en.wikipedia.org/wiki/SMS_language

Брайль использует короткую версию слова;http://www.brl.org/intro/session09/short.html

Другой вариант может использовать CSS-объявление переполнения текста;http://www.quirksmode.org/css/textoverflow.html

В любом случае вам может потребоваться выполнить некоторые замены строк или регулярных выражений перед отображением для пользователя.

Возможно, вы захотите использоватьАтрибут «title» или аналогичный, позволяющий пользователю наводить курсор на сокращенный текст, чтобы получить всплывающее окно с оригиналом.

1 голос
/ 09 июня 2010

Мне «Wrtng. Dcmnts» выглядит ужасно (но это может быть только я).

Я мог бы представить себе использование более длинных и коротких версий, например,

"Writing" -> "Writ."
"Documents" -> "Doc."
"Writ." -> Wr."
"Doc." -> "D."

и т. Д.., затем выберите правильный в зависимости от размера ячейки.

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

"Writing Documents" -> "Writ. Doc."
"Writ. Doc." -> Wr. D."
1 голос
/ 09 июня 2010

Храните несколько версий таких строк, которые будут отображаться в зависимости от размера контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...