In mijn applicatie heb ik meerdere JPanels die JPanel extenden die ik allemaal toe voeg in een klasse die JFrame extend (gebruik geen layoutmannager maar voeg ze simpel toe door add(een jpanel). In De JPanels staan bijv JButtons, JLabels etc. Ook hebben veel JPanels een functie paint() die wat lijnen, vierkanten etc trekt met functies uit de klasse Graphics van awt.
Een aantal JPanels overlappen elkaar (tot nu toe allemaal omdat ik nog niet alle JPanels heb gemaakt omdat ik tegen dit probleem aan liep). Messchien handig om te vermelden dag ik gebruik maak van Observerable en Observer. Als er dan bijv op een JButton van een van de JPanels word gedrukt word er in een van de JPanels (of meerdere) onder andere de update() (de update functie word natuurlijk automatish aangeroepfunctie aangeroepen die een repaint() doet zodat er net ff iets anders word getekend.
Dit werkt alleen niet vlekkeloos. De ene keer is de volgorde waarop de JPanels elkaar overlappen goed en de volgende keer dat ik het programma start is het een zootje nadat ik op een JButton heb gedrukt.
Toen ben ik gaan zoeken of ik de JPanels een vaste waarde voor de overlapping kon geven en kwam ik met JLayeredPane waar ik de JPanels aan toevoegde: (het toevoegen gebeurd allemaal in de klasse die JFrame extend)
Later voegde ik de layer toe aan de contentpane van de JFrame.
Dit hielp echter helemaal niks en ik zat nog steets met het zelfde probleem. Het is wel zo als ik tubePanel en de lampPanel verwissel van index dat ik de tubePanel de eerste keer niet zie, maar zie hem weer wel als ik op een JButton heb gedrukt (dan word er weer een repaint gedaan).
Wat ik verder nog heb geprobeerd is door niet paint te gebruiken maar paintComponent() uit Swing.
Ik denk zelf dat het iets te maken heeft met de repaint of de combinatie van awt en swing...?
P.S. heb dyslexie dus hoop dat het te begrijpen is
Een aantal JPanels overlappen elkaar (tot nu toe allemaal omdat ik nog niet alle JPanels heb gemaakt omdat ik tegen dit probleem aan liep). Messchien handig om te vermelden dag ik gebruik maak van Observerable en Observer. Als er dan bijv op een JButton van een van de JPanels word gedrukt word er in een van de JPanels (of meerdere) onder andere de update() (de update functie word natuurlijk automatish aangeroepfunctie aangeroepen die een repaint() doet zodat er net ff iets anders word getekend.
Dit werkt alleen niet vlekkeloos. De ene keer is de volgorde waarop de JPanels elkaar overlappen goed en de volgende keer dat ik het programma start is het een zootje nadat ik op een JButton heb gedrukt.
Toen ben ik gaan zoeken of ik de JPanels een vaste waarde voor de overlapping kon geven en kwam ik met JLayeredPane waar ik de JPanels aan toevoegde: (het toevoegen gebeurd allemaal in de klasse die JFrame extend)
Java:
1
2
3
| layer.add(lampPanel, 0); layer.add(tubePanel, 1); layer.add(doorPanel, 2); |
Later voegde ik de layer toe aan de contentpane van de JFrame.
Dit hielp echter helemaal niks en ik zat nog steets met het zelfde probleem. Het is wel zo als ik tubePanel en de lampPanel verwissel van index dat ik de tubePanel de eerste keer niet zie, maar zie hem weer wel als ik op een JButton heb gedrukt (dan word er weer een repaint gedaan).
Wat ik verder nog heb geprobeerd is door niet paint te gebruiken maar paintComponent() uit Swing.
Java:
1
2
3
4
5
| public void paintComponent(Graphics g) { super.paintComponent(g); //.......... } |
Ik denk zelf dat het iets te maken heeft met de repaint of de combinatie van awt en swing...?
P.S. heb dyslexie dus hoop dat het te begrijpen is
