2011-08-04 40 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