我很确定这是不可行的,但我会继续指责并问。
我正在尝试将方法添加到内置类中。我希望这个方法可以被所有内置类的子类调用。具体做法是:
我有JButton
,JTextPane
和其他JComponents
。我希望能够将JDom Element
代替Rectangle
传递给setBounds()
。我目前的解决方案是使用所需的方法扩展每个JComponent
子类,但这是很多重复的代码。有没有办法我可以只编写一次以下方法,并且可以在所有JComponent对象上调用它?或者是否需要单独扩展每个子类,并复制并粘贴下面的方法?
public void setBounds(Element element) {
this.setBounds(Integer.parseInt(element.getAttribute(
"x").toString()), Integer.parseInt(element
.getAttribute("y").toString()), Integer
.parseInt(element.getAttribute("width").toString()),
Integer.parseInt(element.getAttribute("height")
.toString()));
}
答案 0 :(得分:0)
我建议采取以下方式。为Element类编写一个包装器(称为ComponentElement),如下所示。
class ComponentElement{
private Element e;
public ComponentElement(Element e)
{
this.e = e;
}
public int getX()
{
return Integer.parseInt(e.getAttribute("x").toString());
}
//similar methods like getY(),getWidth(),getHeight() etc..
}
然后,无论您想要设置组件的边界,
ComponentElement e = new ElementWrapper(element)
component.setBounds(e.getX(),e.getY(),e.getWdith(),e.getHeight());
这将删除您必须重复的大部分样板代码(getAttribute / Integer.parseInt等...)。
它不涉及静态方法。这些方法属于他们所在的地方。 (getX方法属于ComponentElement类。如果你使用静态方法,你会把它放在哪里?一些“Util”类?你怎么命名它?在同一个类中还有哪些其他方法?)
修改强> 或者更好,
class ComponentElement{
private Element e;
public ComponentElement(Element e)
{
this.e = e;
}
Public Rectangle getRectangle()
{
return //a rectangle based on the attributes
}
}
和
component.setBounds(new ComponentElement(element).getRectangle());