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解决方案时,我使用了不同的字体,这并没有给数字符号一个持续的前进。在切换到另一个字体系列后,我不想检查它们是否有持续的进步。果不其然,他们似乎是。所以,谢谢你,贴出答案,我会接受的。:)