我有10 JLabels
我希望有相同的边框。这是一个可以手工管理的数字,但是作为一个程序员,我想知道是否有办法让这更容易。
我尝试过为每个循环实现标签所在面板的所有组件,然后使用方法setBorder(...)
。但这显然不起作用,因为对象被识别为组件而不是JLabel。
如何自动将边界分配到JLabel
?
答案 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());
}
}