![]() |
[Java] Hoe vind ik de oorsprong van een Canvas?
Ik heb een klasse met een speelveld erop. Het is een soort 5-op-een-rij en als je op een vakje klikt, wordt dat vakje gekleurd met de kleur van de speler. Er zijn er hier, in dit geval, 9x9 vakjes.
Om dit doel te bereiken heb ik een class Veld geschreven. Veld extends Canvas en overwrites de methode paint() en update(). Op het speelveld zelf heb ik een variabele: Veld[] vlakjes = new Veld[81]; Op het speelveld heb ik een JPanel met als Layout Manager een GridLayout: JPanel veldPaneel = new JPanel(new GridLayout(9,9)); en deze populeer ik in een for-loop als volgt: for(int index = 0; index < 81; index++) { vlakjes[index] = new Veld(Color.WHITE); //om de veldjes standaard een witte kleur te geven vlakjes.addMouseListener(new VeldHandler()); //etc. veldPaneel.add(vlakjes[index]); } Nu dacht ik dus, dat als ik mijn veldje Canvas laat extenden, dat ieder veldje dus zijn eigen unieke oorsprong had. Maar als ik getBounds().getX() en getBounds().getY() doe, returned ie ALTIJD 0,0. Dit zou geen probleem zijn, als die 0,0 niet als de oorsprong van het frame werd gezien maar als de oorsprong van mijn component. Maar hij returned dus de oorsprong van het frame en niet van het component (wat, bv, op 400,500 staat). Hoe vind ik de coördinaten van het component ten opzichte van het frame? |
Okay, ik heb het nu iets anders gedaan. Aangezien het scherm vaststaat (je kunt dus niet resizen), kon ik aan de hand van het eerste vakje de oorsprong bepalen. De rest was uitrekenwerk.
Nu krijg ik netjes de oorsprong van een vakje als ik deze aanklik, maar als ik teken, wordt mijn vierkantje ACHTER het Canvas component geplaatst. Erm, hoe teken ik vanuit mijn Veld klasse OP het Canvas? :s |
Ik denk dat je gewoon elk Veld moet toevoegen aan de GridLayout van het speelveld.
En je moet (meen ik) zorgen dat je Veld zichzelf kan hertekenen. (Daarvoor heb je alleen de coordinaten binnen het veld zelf nodig.) |
Het probleem lag een beetje anders. Ik weet niet precies waarom paint T.O.V. het frame ging tekenen en niet T.O.V. mijn Veld, maar ik verwarde wel AWT en Swing elementen waardoor mijn paint achter mijn Canvas kwam.
Ik heb nu geen Canvas maar een JPanel dat paintComponent() override. |
Alle tijden zijn GMT +1. Het is nu 02:57. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.