Originariamente inviato da andbin
Lo ripeto ... vorrei essere molto chiaro: GraphicElement non può "essere" un JButton!! Non lo può essere né a livello di ereditarietà (IS-A) perché GraphicElement deriva (indirettamente) da JComponent e né può esserlo "simulato" come pensavi tu, perché andresti incontro a grattacapi non indifferenti ... oltre a fare (ammesso sia tecnicamente fattibile) qualcosa di molto fumoso e poco "standard".

GraphicElement può invece contenere in termini di relazione contenitore-componente un JButton.
Ok e quindi come potrei risolvere il problema?
Dici che posso fare TopElement come interfaccia e GraphicElement che estende direttamente il JButton e implementa TopElement.
Solo che poi ogni volta che uso un TopElement devo verificare che sia un JComponent e fare il cast per poterlo disegnare e però sarebbe peggio perchè in caso di errore si avrebbe a runtime.
codice:
interface TopElement {
       public void elementMethod();
}

class GraphicElement extends JButton implements TopElement {
             @Override
             public void elementMethod() {
                //Some action
             }
}