Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在两种日期格式之间布局一个范围的文本_Java_Swing_Layout_Text - Fatal编程技术网

Java 如何在两种日期格式之间布局一个范围的文本

Java 如何在两种日期格式之间布局一个范围的文本,java,swing,layout,text,Java,Swing,Layout,Text,我目前正在编写一个日历/日期选择器实现,我想知道是否有人知道一种更快/更简单的方法来实现以下效果 例如 2012年2月5日-2012年2月11日 我所追求的效果是使分隔符(/)始终保持在同一位置,并使值始终位于它们之间。这使得在滚动浏览周时更容易理解,因为字体不是单空格 我目前的做法似乎有些过头了,但确实有效。 我正在进行优化/重构,遇到这种情况时,我认为一定有更好的方法 以下是我所拥有的: //getText() return a range in the format dd/mm/yyy

我目前正在编写一个日历/日期选择器实现,我想知道是否有人知道一种更快/更简单的方法来实现以下效果

例如

2012年2月5日-2012年2月11日

我所追求的效果是使分隔符(
/
)始终保持在同一位置,并使值始终位于它们之间。这使得在滚动浏览周时更容易理解,因为字体不是单空格

我目前的做法似乎有些过头了,但确实有效。
我正在进行优化/重构,遇到这种情况时,我认为一定有更好的方法

以下是我所拥有的:

  //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);
效果:


谢谢。

即使按比例间隔的字体通常也会使数字字形不断前进。给定逻辑系列的UI默认值或实际值相当可靠。正如@Hovercraft所评论的那样,你可以充分利用它的所有好处。

似乎有点过分了。为什么不使用SimpleDateFormat和单间距字体呢?我完全同意,这就是为什么我决定问这个问题。如果有一种使用非等距字体的简单方法,那将是最理想的。一个明显的折衷方案是简单地使用单间距字体。即使是按比例间距的字体通常也会使数字字形不断前进。这太合适了+1.当我提出overkill解决方案时,我使用了不同的字体,这并没有给数字符号一个持续的前进。在切换到另一个字体系列后,我不想检查它们是否有持续的进步。果不其然,他们似乎是。所以,谢谢你,贴出答案,我会接受的。:)