如何绕过父类绘制方法的调用

时间:2012-12-11 12:08:17

标签: java applet

我正在研究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 个答案:

答案 0 :(得分:2)

getParent()方法没有按照您的想法执行。它与继承和超类无关。它只返回该组件位于UI 中的awt容器。

例如,如果组件位于面板内的滚动窗格内,则在组件中调用getParent().getParent().paint(g);将调用面板的paint方法。

enter image description here

答案 1 :(得分:2)

首先,getParent不会获取继承父级;它获取了 Component 父级,所以你正在尝试的并不能做你想要的,即使它确实有效。

其次,我认为是时候重新考虑你的applet设计了。如果您不想继承您继承的类的行为,那么为什么要继承它呢?你为什么不直接从Component继承?我想如果你试图让你的类成为ThirdParty的子类,然后绕过一些ThirdParty的行为而不是全部的行为,可能会产生各种各样的后果。