2016-11-15 128 views
10

線最小化反正是有減少的代碼行數來達到同樣的事情有沒有辦法爲這個

L1.setFont(new Font("Serief", Font.BOLD, 24)); 
    L2.setFont(new Font("Serief", Font.BOLD, 24)); 
    L3.setFont(new Font("Serief", Font.BOLD, 24)); 
    L4.setFont(new Font("Serief", Font.BOLD, 24)); 
    L5.setFont(new Font("Serief", Font.BOLD, 24)); 
    L6.setFont(new Font("Serief", Font.BOLD, 24)); 
    L7.setFont(new Font("Serief", Font.BOLD, 24)); 
    L8.setFont(new Font("Serief", Font.BOLD, 24)); 
+3

將它分組在List中怎麼辦? (forWhateverThisClassIs item:whateverThisClassIslist){item.setFont(...); '? – SomeJavaGuy

+0

不是Serif而不是Serief? –

+0

爲什麼?在這種情況下,更重要的是隻創建一個「Font」對象而不是8個(並且正確拼寫「Serif」) – EJP

回答

23

你可以做

Font serif = new Font("Serif ", Font.BOLD, 24); 
for (JLabel l : new JLabel[] { L1, L2, L3, L4, L5, L6, L7, L8 }) 
    l.setFont(serif); 

在Java 8你可以寫

Stream.of(L1, L2, L3, L4, L5, L6, L7, L8).forEach(l -> l.setFont(serif)); 
2

得到它歸結爲... 4條線;-)

setFont(new Font("Serief", Font.BOLD, 24), L1, L2, L3, L4, L5, L6, L7, L8); 

private void setFont(Font font, Object... objects){ 
    for(Object object : objects){ 
     object.setFont(font); 
    } 
} 

正如Hulk在評論中指出的那樣,您應該將Object替換爲您呼叫setFont的任何類別。

請記住,無論何時您看到重複編碼,您都可以經常使用方法調用來替換它。這裏有一些關於重複代碼爲什麼不好的更多信息:https://en.wikipedia.org/wiki/Duplicate_code

+1

當然,爲了避免初學者感到困惑,'Object'必須被一個實際上有一個'setFont'方法的類型替換,以便進行這種編譯 - 可能值得更改爲其他方法。 – Hulk

2

是創建一個名爲setFont(Object ... values)的方法,並傳遞需要設置字體的任意數量的對象。 下面給出的是JLabel對象的示例。

void setFont(JLabel... jLabels){ 
    for(JLabel jLabel : jLabels){ 
     jLabel.setFont(new Font("Serif", Font.BOLD, 24)); 
    } 
} 

你可以這樣調用它

setFont(L1,L2,L3,L4); //any number of arguments 
4

其他的答案是正確的,但他們把你的設計問題作爲給定。簡單地說:我認爲這是錯誤的。

重點是:只要你開始命名變量,如L1,L2,L3,...你正在做的事情錯誤。特別是當你的下一個想法是編寫處理L1的特定代碼和處理L2的代碼時;等等。也許其他答案可以幫助你修復你的代碼的這個部分。但遲早你會有大量不足的代碼;所有人都以他們自己的方式與這些Lx傢伙打交道。或者甚至沒有這些標籤,在這個程序中。但是其他一些代碼在開始時出現了以低效的方式組織您的(UI)元素的相同錯誤。

real解決方法:你應該使用某種收集機制;或者是List;或者可能是一個普通的舊數組。因爲那麼你可以迭代該集合,並確切地說一個代碼行以相同的方式設置該集合中的所有元素。

或者相反:您查詢包含其元素的所有標籤的面板;並且如果某個元素符合某個條件,則可以根據需要更新其屬性。如果你遵循這個道路,你甚至可能不需要在你的「自己的代碼」中保留對你的元素的任何引用。你只是使用已經存在的手段;並且可以像this一樣簡單。

我在說什麼:在這些其他解決方案中的所有好主意,但我認爲他們走錯了方向。他們試圖用好的想法來修復一個破碎的評論。遵循現在非常有名的mem:考慮這樣的UI元素是,而不是寵物。含義:它們是你組織,使他們可以訪問作爲一種有效的(整體單純的「數量」到你對一個寵物被視爲個人,有一個名字,被稱呼爲「單一實體「 大多數時候)。

但只是添加我的簡短版本;彼得的解決方案略有變化:

for (JLabel l : Arrays.asList(L1, L2, L3, L4, L5, L6, L7, L8)) 

也可以工作。