2016-11-23 80 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]);