Wat gaat er niet goed?

Status
Niet open voor verdere reacties.

e-mail-user

Gebruiker
Lid geworden
24 apr 2007
Berichten
133
Ik heb het volgende:
Code:
public abstract class Canvas extends JPanel implements KeyListener, MouseListener {
}

public class FrameWork extends Canvas {
}

public class Window extends JFrame{
   private Window() {
        //.....
        this.setContentPane(new FrameWork());
   }
}
de regel: this.setContentPane(...) geeft de boodschap: "The method setContentPane(Container) in the type JFrame is not applicable for the arguments (FrameWork)"

Kan iemand mij zeggen wat ik hier fout doe?
 
Laatst bewerkt:
Enig gepruts levert het volgende resultaat:

Code:
		Container contentPane = this.getContentPane();
		
		FrameWork frameWork = new FrameWork();
		
		contentPane.add(frameWork);

Maar waarom het FrameWork nu wel in de container wordt geplaatst, is mij een raadsel.
Graag een verklaring van iemand die het wel begrijpt.
 
Euuuhm, misschien moet je eens aan een of ander support vragen.
 
Het is niet zo vreemd. Je klasse Window is een subklasse van JFrame en de methode setContentPane van JFrame verwacht een argument van het type Container (of een subklasse daarvan). Jij geeft een argument van het type FrameWork mee. Dit is geen subklasse van Container en daarom werkt dat niet.

Bij je tweede manier vraag je het contentPane op. Deze is van het type Container. De methode add van de klasse container verwacht een argument van het type Component (of een subklasse daarvan). Jij geeft als argument een FrameWork, dat is een subklasse van Canvas en dat is weer een subklasse van Component. Daarom werkt dat wel.
 
Dank

Supersnail, u bent een HEER!
Dan k voor het antwoord; zo eenvoudig kan het soms zijn.
 
Nadere reflexie

Mijn klasse "Window" staat in de volgende "boom":
Object < Component < Container < Window < Frame < JFrame < Window

Mijn klasse FrameWork staat in deze "boom":
Object < Component < Container < JComponent < JPanel < Canvas < FrameWork

Zowel mijn klassen Window als FrameWork stammen af van Container.

Ben ik misschien iets vergeten dat het statement: "this.setContentPane(new FrameWork());"
in mijn klasse Window niet werkt?
 
Het vervelende van googelen is dat je op oude informatie kan uitkomen en dat is wat er hier gebeurd is. De links die je geeft zijn van Java versie 1.4.2, deze versie werd gebruikt tot 2006. Waarschijnlijk gebruik je nu Java versie 6 of 7 en daarbij is het veranderd (zie de links die ik gaf).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan