Létrehozunk egy új Java projektet, de nem pipáljuk be a main metódust. A projekt Haromszogek névre hallgat. (a képeken néha eltérnek a jelölések)
A létrehozott projekthez új jFrameForm osztályt adunk jobb egérgombbal, majd futtatjuk. Futtatásnál az IDE megkérdezi mi legyen a main metódus. Válasszuk a main metódusnak a jFormot. (nem is nagyon tudunk mást...)
Így már lett egy üres Formunk (programablakunk). A Formon a feladat mintájának megfelelő elrendezésben, el kell helyezned 4 Labelt, 1 gombot, 2 TextArea-t, és egy Listát az AWT komponensek közül. Majd a Labellek text mezőjét szerkesztve feliratozod őket. A dizájnnal tulajdonképpen kész is vagy. (Az eredeti kép szerintem C #-os fejlesztő környezetben készült, a te kinézeted egy picit más lesz, ha Java-ban dolgozol.)
Létrehozzuk a DHaromszög osztályt, mint ahogyan azt a feladat kéri. A legegyszerűbb a projekt default csomagja felett jobb egérgombbal kattintani, hasonlóképpen mint a jFrameFormnál, és új osztályt hozni létre.
Létrehozzuk a "private" változókat, a háromszög oldalainak:
public class DHaromszog {
private double aOldal;
private double bOldal;
private double cOldal;
}
Létrehozzuk a gettereket settereket: Egy üres programkódsor felett bal egérgombot nyomunk. Kiválasztjuk az Insert Code menüpontot, azon belül a Getter-t, illetve később a Setter-t, és létrehozzuk ezeket az a, b és c oldalak értékeinek lekérdezéséhez, illetve felülírásához, mivel a private típusú változókat nem tudnánk az osztálypéldányunkban elérni, viszont a getterekkel és setterekkel értéküket változtatni tudjuk.
A konstruktort is érdemes hasonlóképpen létrehozni, itt arra ügyeljünk, hogy van két bemenő paramétere: egy String, és egy szám. A Szövegben ugye a háromszög három oldala van benne vesszővel elválasztva, a szám meg a háromszög sorszámát mondja meg a beolvasott fájlban. (ezzel most még nem foglalkozunk.) Létrehozunk egy ideiglenes változót amiben már kicseréltük a vesszőket pontokra, majd szétvágjuk a szöveget a split sztringfüggvénnyel a szóközöknél.
A split tömbnek annyi eleme lesz, ahány vágás történt. Mivel megbízhatóak szerkezet szempontjából a bemeneti adatok, így kettő szóköznél, három elem kerül a split nevű tömbünkbe. pl: "1,2 2,3 3,2" ---> "1.2 2.3 3.2"---->1.2->2.3->3.2
Ez után már át is adhatjuk az oldalak értékeit a privat változóinknak, ügyelve arra, hogy a Double osztály parseDouble metódusával a típusa is átalakuljon szöveg típusból tört számmá! (ez hasonlóan működik mint az Integer osztály parseInt metódusa) A konstruktorunk egyenlőre kész, de későbbiekben még visszatérünk hozzá!
A feladat kéri, hogy vizsgáljuk meg az adatokat a saját osztályfüggvényeinkkel. Ehhez hozunk létre hármat: EllNovekvosorrend, EllMegszerkeszthető, EllDerekszogu. Az első azt vizsgálja, hogy az oldalak növekvő sorrendben vannak-e, tehát egyszerre kell fennállni az a<b és a b<c tulajdonságnak. Ezt vizsgálja az if feltétele: (a<b && b<c)
A visszatérési érték igaz vagy hamis a tulajdonság meglététől függően. Hasonló szerkezetű a másik két függvény is, a feladatnak megfelelően.
Visszatérünk a konstruktorra. A hibát abban az esetben dobjuk, ha valamelyik oldalakat vizsgáló függvény nem igaz. Ezért tettem mindegyik elé egy felkiáltójelet, ami a tagadást jelöli. Ebben az esetben saját kivételt kell dobnunk. Ezt a throw parancscsal érhetjük el. Az egyszerűség miatt az általános Error lett a hiba típusa. A hibaüzenetünk szövege fontos, mert ez fog a későbbiekben megjelenni a hibaüzeneteknél a szövegdobozban. (TextArea1)
A kivételt dobó osztályunkat a főprogramból a következő kóddal tesztelhetjük. a tesztelést érdemes a jButton eseményével vezérelni, mivel a későbbiekben is ezt használjuk majd az adatok betöltésére a fájlból.
folyt. köv.A folytatásban egy kicsit átírjuk az eddigieket: A gomb eseményéből kivesszük a teszteléshez használt kódot, helyette itt csak egy opendialogot dobunk fel. Erre tesszük rá a Fájlválasztó komponenst. Az eltűntetésért, a fájlbeolvasásért, illetve a példányosításokért már a FileChooser1ActionsPerformed eseménye lesz a felelős. Beolvassuk a sorokat a fájlunkból a FileReader és a Scanner osztály használatával. Segítségül vesszük a Scanner osztály hasnext(), illetve nextline() metódusát is. Az aktuális sort amit a sorszam változó értéke tartalmaz, átadom a DHaromszog példányomnak amit dh-nak nevezek a programban. DHaromszog dh=new DHaromszog(be.nextLine(),i) Az i értéke az aktuális sor számát mutatja, minden beolvasás után léptetjük. A haromszögpéldányunkat hozzáadjuk a haromszoglistához melynek névköre osztályszintű, így más eseményeknél is hivatkozhatunk rá. A feladat kéri a hibakezelést, egyrészt IOException a fájlunk beolvasásához kell, másrészt az Error hibával az osztálypéldányom hibás oldalait kezelem le, így én kettős try-catch metódussal oldottam meg az érthetőség kedvéért. Természetesen másféleképpen is megoldható!
Ez után szintén még a FileChooser1ActionsPerformed eseményénél hozzáadjuk a Listához a "hibátlan" háromszögek adatait. Egy for ciklussal végigjárjuk a listát, haromszoglista.get(i).-vel kivesszük a háromszög adatait, és üres szóközök segítségével összerakjuk a megjeleníteni kívánt adatokat. Az awt-ből választott lista komponsenshez adjuk hozzá a háromszögeink adatait tartalmazó sorokat.
for (int i = 0; i < haromszoglista.size(); i++) {
list1.add((i + 1)+". sor: "+haromszoglista.get(i).getA()+" "+haromszoglista.get(i).getB()+" "+ haromszoglista.get(i).getC()+"\n");
}
Az utolsó lépésben létrehozunk a Listához egy egér kattintás eseményt. Ha ez megtörténik, lekérjük a kattintott listaelem indexét, és az azonos sorszámú haromszoglista elem kerulet() illetve terulet() függvényét meghívva a jTextArea3-ra kiírjuk a kiválasztott háromszög kerületét és területét, megfelelően megformázva.
Természetesen megírjuk hozzá a DHaromszog osztályba a kerület és terület függvényeket is.
Az utolsó módosítás: 2023 September 19 13:49:18.