2011-08-04 76 views
2

我有10 JLabels,我想要有相同的邊框。這是一個可手動管理的數字,但要成爲一名程序員,我想知道是否有辦法讓這更容易。將邊框分配給多個JLabels

我已經嘗試了每個循環,確保標籤所在的面板的所有組件都正確,然後使用方法setBorder(...)。但是這不起作用,因爲這些對象被識別爲組件而不是JLabel。

如何自動將邊框分配到JLabel

回答

10

@Atreys提供的答案就足夠了,但有不止一種方法來皮膚一隻貓。另一個選擇是創建一個擴展類JLabel並在其構造函數中分配一個邊界。因此,根據您的請求,所有實例都具有相同的邊框。這也避免了笨拙地迭代Component的集合,使用instanceof運算符,然後進行類型轉換,這不是真正的OOP。


public final class BorderedJLabel extends JLabel{ 
    public BorderedJLabel(){ 
     // assign border 
    } 
} 

附錄:

如果你想避免爲每個新BorderedJLabel鍵入實例new BorderedJLabel()的詳細程度,你可以仔細閱讀一個靜態工廠方法,這樣

public final class BorderedJLabel extends JLabel{ 
    private BorderedJLabel(){ 
     // assign border 
    } 

    public static final BorderedJLabel newInstance(){ 
     return new BorderedJLabel(); 
    } 
} 

給予在此設計中,您只需鍵入BorderedJLabel.newInstance()即可更簡潔地創建新的BorderedJLabel實例。

+1

對於想要構建JLabel的每種方式,您都需要添加一個合適的方式來構建MyJLabel。這將是解決問題的更多OOP方法,但可能需要更多工作,並且如果您忘記了您擁有MyJLabel類,並且錯誤地使用了JLabel,那麼您將無法獲得邊界集。 – Atreys

+2

+1:這種方法可以讓你在組件上擁有無邊界的JLabel。 – pmnt

+0

正確的建議+1 – mKorbel

4

這聽起來像你有解決方案,差不多。

迭代通過面板上的所有組件,並且如果是一個JLabel,投它,並設置邊框:

for (Component comp : componentList) { 
    if (comp instanceof JLabel) { 
     ((JLabel)comp).setBorder(myBorder()); 
    } 
} 
+0

啊,演員失蹤了。非常感謝你! – Patrick

+0

我也喜歡你的答案,因爲你把最初修復的問題交給了我。 – Patrick