我正在研究applet,我的类扩展了第三方api类,它有paint(Graphics g)方法 . 这个类扩展了JComponent并从它的paint(Graphics g)调用super.paint(g) . 现在我想从我的类中直接调用JComponent绘制方法 . 有没有办法做到这一点 . 我尝试下面但是给出错误
getParent().getParent().paint(g);
或者您可以通过以下方式了解这一点
ThirdPartyClass extends JComponent{
public void paint(Graphics g){
super.paint(g);
//some work
}
}
MyClass extends ThirdPartyClass{
public void paint(Graphics g){
getParent().getParent().paint(g); // not working giving exceptions
}
}
2 回答
首先,getParent不会获得继承父级;它获得了Component父级,所以你正在尝试的并不是你想要的,即使它确实有效 .
其次,我认为是时候重新考虑你的applet设计了 . 如果您不想继承您继承的类的行为,那么为什么要继承它呢?你为什么不直接从Component继承?我想如果你试图让你的类成为ThirdParty的子类,然后绕过一些ThirdParty的行为而不是全部的行为,可能会产生各种各样的后果 .
getParent()
方法没有按照您的想法执行 . 它与继承和超类无关 . 它只返回该组件在UI中所处的awt容器 .例如,如果组件位于面板内的滚动窗格内,则在组件中调用
getParent().getParent().paint(g);
将调用面板的paint方法 .