Formering af firkanter med Java

Tags:    java swing

Hej alle!
Jeg er igang med at lave et lille program i Java med swing. Har lavet et JFrame og har tilføjet et JPanel til JFrame. Jeg har tegnet en stor firkant i mit panel, og har lavet en MouseListener klasse. Jeg vil have mit program til, at hver gang man fører musen "ind" i en firkant, formere den sig, til 4 mindre firkanter. Der er altså til at starte med kun 1 firkant, og når man rør den med musen, så splitter den sig op i 4 mindre firkanter, som tilsammen udfylder det samme areal som den første firkant. Så når man rør en af de andre små firkanter splitter den sig op i 4 osv osv. Jeg skal have tilføjet min mouselistener klasse til hver firkant der bliver lavet, men indtil videre har jeg bare tegnet dem på skærmen, jeg skal bruge en eller anden form for variabel-firkant. How to do?

Tak på forhånd :-D



7 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 14 karma
Sorter efter stemmer Sorter efter dato
En af måderne man kan benytte sig af, er at tilføje en JPanel pr. firkant

lidt ligesom dette:

Fold kodeboks ind/udJava kode 


Fold kodeboks ind/udJava kode 


En anden, og nok bedre metode, man kan benytte sig af, er at gøre brug af java2d, og have en liste af geometri modeller, som dit ene panel tegner, og så blot ændre på disse.

Så som dette:

Fold kodeboks ind/udJava kode 


Fold kodeboks ind/udJava kode 




En referance er "næsten" det samme som en pointer i C.
Hvis man for eksempel har 30 kasser i et super marked, svarer det til at du siger du har gerne vil have den kasse, der står nederst til venstre samtidige med at du peger på den, så alle ved hvilken du taler om.
(Det at du peger, på hvilken kasse det er, svarer til en referance)

Hvis der er 2 firkanter, den ligger overens, så vælger den kun den første firkant, og gør noget ved denne. Da den herefter bryder ud af for-løkken.

Dette kan have noget at gøre med, hvordan vi vælger firkanter (det burde ikke være hastighed). Da du kan risikere, at dit muse klik ikke ligger oven i den rigtige firkant. Du kan gøre, nogle ting, for at hjælpe på dette.

1. Lav vores muse firkant mindre, fra 5*5px til f.eks 2*2
2. I stedet for kun at vælge den ene firkant, hvis muse klikket overlapper, kan du vælge alle de firkanter den overlapper. Dette gøres ved at fjerne den linjes kode, hvor der står break i, i for løkken




Start med at ligge noget af den kode du i forvejen har skrevet, så det bliver nemmere at se, hvordan du har designet dit system :)



Fold kodeboks ind/udJava kode 


Denne linjes kode sørger for at vi har en referance til vores panel.

Fold kodeboks ind/udJava kode 


Som du rigtigt skriver, så kører denne metode igennem alle elementer i ArrayListen. Det der også sker, er at den tjekker, hvilken firkant der bliver klikket på, ved at vi har lavet en firkant på 5*5px, i det x,y koordinat, hvor musen er klikket, og hvis denne musse firkant ligger oven i en, i en af rectanglerne i geometry'en. Det er så denne geometry rectangel, som vi kører metoden divideRect på.

Hvad tænker du på med dette:
Den reagere ikke hver gang jeg klikker, er der noget man kan gøre så det bliver hurtigere?




main klasse
Fold kodeboks ind/udJava kode 


Panel klasse
Fold kodeboks ind/udJava kode 


Jeg skal på en eller anden måde have lavet nogle firkanter som ikke bare er tegnet på skærmen, men som er et "objekt" jeg kan arbejde med, så jeg kan tilføje en Mouselistener. Ligesom en label I guess?



Valgte af bruge din java2d kode, den virkede bedst - har kommenteret koden og 2 steder kan jeg ikke forstå hvad du gør, hvad er det der sker?

Fold kodeboks ind/udJava kode 


Den reagere ikke hver gang jeg klikker, er der noget man kan gøre så det bliver hurtigere?



Indlæg senest redigeret d. 09.12.2012 20:32 af Bruger #16945
Jeg er ikke så skarp på referancer :S Hvad var det nu lige det var?

Så hvis den der firkant på 5*5px ligger oven i 2 firkanter, så vil der ikke ske noget, oder was ?

- Jeg mener at nogle gange når jeg klikker med musen reagere programmet ikke, så jeg skal trykke lidt flere gange. Som om den ikke når at opfatte det .



t