Как расположить текст в диапазоне между двумя форматами даты - PullRequest
2 голосов
/ 06 февраля 2012

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

напр.

05/02/2012 - 11/02/2012

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

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

Вот что у меня есть:

  //getText() return a range in the format dd/mm/yyyy - dd/mm/yyyy

  String firstHalf = getText().substring(0, 10);
  String secondHalf = getText().substring(getText().length() - 10);

  int yOff = baseLine - ((showSubtext) ? 5 : 0);

  int slashWidth = fm.stringWidth("/");
  String a, b, c, d, e, f;
  int A, B, C, D, ax, bx, cx, dx, ex, fx;

  a = firstHalf.substring(0, 2);
  b = firstHalf.substring(3, 5);
  c = firstHalf.substring(6);
  d = secondHalf.substring(0, 2);
  e = secondHalf.substring(3, 5);
  f = secondHalf.substring(6);

  int sideGap = 45;
  int fieldWidth = 28;
  int leftOffset = 4;

  A = sideGap + fieldWidth;
  B = A + fieldWidth + slashWidth / 2;
  D = getWidth() - A - 20;
  C = D - fieldWidth - slashWidth / 2;

  ax = A - fm.stringWidth(a);
  bx = ((B - A) - fm.stringWidth(b)) / 2 + A + slashWidth / 2 + 1;
  cx = B + slashWidth;

  dx = C - fm.stringWidth(d);
  ex = ((D - C) - fm.stringWidth(e)) / 2 + C + slashWidth / 2 + 1;
  fx = D + slashWidth;

  g.drawString("/", A - leftOffset, yOff);
  g.drawString("/", B - leftOffset, yOff);
  g.drawString("/", C, yOff);
  g.drawString("/", D, yOff);

  g.drawString(a, ax - leftOffset, yOff);
  g.drawString(b, bx - leftOffset, yOff);
  g.drawString(c, cx - leftOffset, yOff);
  g.drawString(d, dx, yOff);
  g.drawString(e, ex, yOff);
  g.drawString(f, fx, yOff);

Эффект:
Image effect

Спасибо.

1 Ответ

2 голосов
/ 06 февраля 2012

Даже пропорционально расположенные шрифты обычно дают глифам цифры постоянное продвижение. По умолчанию пользовательский интерфейс или фактическое значение Font для данного логического семейства являются достаточно надежными. Как комментирует @Hovercraft, вы можете использовать все значительные преимущества SimpleDateFormat.

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