为多个JLabel分配边框

Pat*_*ick 2 java swing border jlabel

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

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

如何自动将边界分配到JLabel

mre*_*mre 10

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


public final class BorderedJLabel extends JLabel{
    public BorderedJLabel(){
        // assign border
    }
}
Run Code Online (Sandbox Code Playgroud)

附录:

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

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

    public static final BorderedJLabel newInstance(){
        return new BorderedJLabel();
    }
}
Run Code Online (Sandbox Code Playgroud)

有了这个设计,你就可以BorderedJLabel通过简单的输入更简洁地创建新的实例BorderedJLabel.newInstance().

  • +1这是一个子类化的教科书案例,虽然我可以尊重地建议这个类叫做'BorderedJLabel`.创建所有构造函数需要在Eclipse create class向导上单击"从超类创建构造函数". (3认同)
  • +1:这种方法允许您在组件上也有无边框的JLabel. (2认同)