2016-11-23 52 views
0

我正在尝试创建旋转颜色的String。每个字母都有不同的color,他们需要以线性方式旋转。文本将进入JLabel在字符串中旋转颜色

我构建了文本,以便它可以创建一个单词和一个颜色数组(字符串)。

String[] colors = {"white", "blue", "red"}; 
String word = "foo"; 
String coloredText; 

String[] letters = word.split("(?!^)"); //split text into indiv. letters 

     coloredText = "<html>"; 

     for(int i = 0, j = 0; i < letters.length; i++, j++){ 

      if(j >= colors.length) 
       j=0; 

      coloredText += String.format("<font color='%s'> %s </font>", colors[j], letters[i]); 
     } 

     coloredText += "</html>"; 

这将导致具有FOO搭配白色F,蓝色O和红色最终O的字符串。

当然,如果颜色比字母少,他们会继续旋转。

现在我有一个timer来旋转颜色,但我无法弄清楚algorithm这样做。 基本上,每种颜色都应该代替下面的一种,最后一种替代第一种。

因此,例如:

enter image description here

当然,这必须对任何给定数量的字母和颜色的工作,与不适合被忽略的颜色。 (10个颜色的3个字母的单词将仅使用前3个颜色)。

我试过使用.replace(),但regex对我来说有点太难了。

有什么想法?

+1

保留用于字段中第一个字母的颜色索引,并在每次为字符串上色时将其减少。如果它达到-1,则将其重置为最后一个索引。第一轮是0,所以你最终会得到WBR。然后你减少它。因为它变成-1,所以你把它设置为2,并且你最终得到RWB。然后你减少它,你最终与BRW。 –

回答

4

您可以将一个附加整数(类或实例变量,取决于您的代码)作为0和colors.length-1之间的偏移计数器。

int offset = 0 

每当您的计时器执行时,将偏移量加1并检查您的偏移量是否溢出了允许的偏移量。如果是的话,将其重置为0。

void onTimerExecutes(){ 
    offset++; 
    if (offset >= colors.length) 
     offset = 0; 
    applyColorsToText(); 
} 

然后添加偏移到您的j

j = offset; 
for(int i = 0, i < letters.length; i++, j++) 
+1

偏移量应该递减以便按OP的方式旋转 –

2

或者你可以跳过一些行,如果你不复位偏移为0,但指数的阵列做与模数运算符。见Modulus Operator

所以你必须

void onTimerExecutes(){ 
offset++; 
applyColorsToText(); 
} 

,并在for循环

  coloredText += String.format("<font color='%s'> %s </font>", colors[offset%colors.length], letters[i]); 

如果你想绕旋转的其他方式,你的递减而不是偏移:

offset = 0; 
void onTimerExecutes(){ 
offset--; 
applyColorsToText(); 
} 

并使用Math.floorMod(int, int),所以:

  coloredText += String.format("<font color='%s'> %s </font>", colors[Math.floorMod(offset, colors.length)], letters[i]);