[JAVA] Oddelenie logiky od GUI

Programovacie jazyky, rady, poradňa...
Hensym
VIP
VIP
Používateľov profilový obrázok
Príspevky: 6978
Registrovaný: 24 apr 2011, 0:53
Bydlisko: Zvolen

[JAVA] Oddelenie logiky od GUI

Príspevok od používateľa Hensym »

Ahojte, naklikal som si GUI-čko cez Window Builder, väčšiu časť programu mám oddelené, ale celkom slušnú kopu logiky mám stále v triede s "oknom", a chcem sa toho úplne zbaviť, aby mi v GUI classe ostali čisto iba jednotlivé prvky (tlačítka, radio boxy, a pod.), ich vlastnosti a nič viac. Teda chcem mať celú logiku v druhej časti programu, alebo ešte lepšie, rozdeliť to na tri časti a docieliť v podstate MVC model. Už nejaký čas Googlim, no nedopátral som sa v podstate k ničomu konkrétnemu - resp. jednoduchému vysvetleniu, ako by to šlo. Je tu niekto, kto by mi to vedel vysvetliť napríklad na jednoduchom príklade s tlačítkom?

Mám takéto tlačítko v triede Window:

Kód: Vybrať všetko

JButton firstButton = new JButton("My first button");		
btnCreateProject.setBounds(100, 100, 80, 30);
frame.getContentPane().add(firstButton);
...toto tlačítko bude volať povedzme konštruktor Employee(params) z triedy Employee, a teda by som to mohol spraviť takto:

Kód: Vybrať všetko

JButton firstButton = new JButton("My first button");
firstButton.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent e) {
		.....volanie konstruktora a dalsi balast....
	}
});
btnCreateProject.setBounds(100, 100, 80, 30);
frame.getContentPane().add(firstButton);
Ale toto ja presne nechcem. Chcem, aby mi v triede Window ostalo iba tlačítko, a nič viac, ani žiadne listenery. Listenery by som chcel mať v osobitnej triede, napríklad Controller, a až z tejto triedy by som volal konkrétne metódy, konštruktory iných tried,...

Vedel by mi niekto poradiť na tomto jednoduchom príklade, ako na to? Ďakujem veľmi pekne, karma istá, aj 3x postupne v priebehu týždňa. :D
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: [JAVA] Oddelenie logiky od GUI

Príspevok od používateľa *****HERO***** »

tak si v triede window zadefinuj ten button ako class property, nie iba lokalne v tej jednej funkcii, a daj jej pristup von - sprav getter funkciu, co bude vracat instanciu toho buttonu (nezabudni ju predtym vytvorit - napr. v konstruktore). z controlleru si ho potom cez tu funkciu vytiahni a pridaj si toho listenera tam.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8217
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: [JAVA] Oddelenie logiky od GUI

Príspevok od používateľa harrison314 »

Ja by som to nekoplikoval, sprav si tvoju aplikacnu logiku ako triedy v v namespace pre aplikacnu logiku, hlavne triedy by mali implementovat nejake rozhrania. Too rozhranie pouzijes v systeme okien.
prosto aplikacnu loiku implementujes ako keby to bola kniznica a je ti jedno, ci sa pouzije v konzole alebo GUI.
Myslim, ze vo swingu tomu viac nedas.
Napísať odpoveď