为多个JLabel分配边框

时间:2011-08-04 12:28:24

标签: java swing border jlabel

我有10 JLabels我希望有相同的边框。这是一个可以手工管理的数字,但是作为一个程序员,我想知道是否有办法让这更容易。

我尝试过为每个循环实现标签所在面板的所有组件,然后使用方法setBorder(...)。但这显然不起作用,因为对象被识别为组件而不是JLabel。

如何自动将边界分配到JLabel

2 个答案:

答案 0 :(得分:10)

@Atreys提供的答案就足够了,但是不仅有一种方法可以给猫皮肤。另一种选择是创建一个扩展JLabel的类,并在其构造函数中指定一个边框。因此,根据您的请求,所有实例都具有相同的边框。这也可以避免不得不笨拙地迭代Component的集合,使用instanceof运算符,然后进行类型转换,这不是真正的OOP。


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

附录:

如果您想避免必须为每个新new BorderedJLabel()实例键入BorderedJLabel的详细程度,您可以仔细阅读静态工厂方法

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

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

根据此设计,您只需输入BorderedJLabel即可更简洁地创建新的BorderedJLabel.newInstance()个实例。

答案 1 :(得分:4)

听起来你差不多有解决方案。

遍历面板的所有组件,如果一个是JLabel,则将其强制转换并设置边框:

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