Terve!
Miten swing-ohjelmoinnissa kannattaa jakaa koodin toiminnallisuus ja itse käyttöliittymä eri tiedostoihin?
Jos mulla on iso ohjelma, jossa vaikkapa 3 eri "pääikkunaa", teenkö 3 eri tiedostoa joissa ohjelman toiminnallisuus suoritetaan?
Mitä jos ikkunan A nappia painetaan ja sen seurauksena pitää aueta ikkuna B, jonka tiedot myös pitää välittää A:n tietojen lisäksi toiminnallisuuden suortittavalle luokalle, kumman luokan toiminnallisuusluokassa työ sitten tehdään?
Näitä asioita ei tunnuta käsittelevän missään, en ainakaan mitään ole googlaamalla löytänyt. Sen tiedän, että koodi hajoaa käsiin jos näitä ei suunnitella etukäteen.
Ymmärsiköhän kukaan, mitä yritän kysyä? Yritin jo aiemmin kysellä, mutta en oikein saanut vastauksia. Tietäisköhän esim. Piru mistä löytäisin ohjeita?
Miten swing-ohjelmoinnissa kannattaa jakaa koodin toiminnallisuus ja itse käyttöliittymä eri tiedostoihin?
Jos mulla on iso ohjelma, jossa vaikkapa 3 eri "pääikkunaa", teenkö 3 eri tiedostoa joissa ohjelman toiminnallisuus suoritetaan?
Mitä jos ikkunan A nappia painetaan ja sen seurauksena pitää aueta ikkuna B, jonka tiedot myös pitää välittää A:n tietojen lisäksi toiminnallisuuden suortittavalle luokalle, kumman luokan toiminnallisuusluokassa työ sitten tehdään?
Näitä asioita ei tunnuta käsittelevän missään, en ainakaan mitään ole googlaamalla löytänyt. Sen tiedän, että koodi hajoaa käsiin jos näitä ei suunnitella etukäteen.
Ymmärsiköhän kukaan, mitä yritän kysyä? Yritin jo aiemmin kysellä, mutta en oikein saanut vastauksia. Tietäisköhän esim. Piru mistä löytäisin ohjeita?
Vastaukset 2
Vanhimmat
En tiedä, mutta itse laittaisin kokonaisuudet omiin luokkiinsa (tiedostoihin). Mikäli ohjelmassani olisi kolme ikkunaa, tekisin jokaiselle ikkunalle omat luokkansa ja lisäksi käyttäisin muita luokkia.
Olisikohan suunnittelumalleista apua?
http://fi.wikipedia.org/wiki/Suunnittelumalli
Saisikohan avoimen lähdekoodin projekteista vinkkiä?
http://www.google.com/codesearch
http://www.codase.com/
"Jos mulla on iso ohjelma, jossa vaikkapa 3 eri "pääikkunaa", teenkö 3 eri tiedostoa joissa ohjelman toiminnallisuus suoritetaan?"
Teet, koska se on iso.
"Mitä jos ikkunan A nappia painetaan ja sen seurauksena pitää aueta ikkuna B, jonka tiedot myös pitää välittää A:n tietojen lisäksi toiminnallisuuden suortittavalle luokalle, kumman luokan toiminnallisuusluokassa työ sitten tehdään? "
Ehdoton periaate on ettei saa tuplata( tai triplata) dataa - se on rumaa ja tulee ongelmia. Ja tulkitsen kysymyksen niin, että on monta ikkunaa joita käpälöidään mielivaltaisessa järjestyksessä eli oikeastaan muistuttaa client-server tilannetta. Joten oma luokka datalle, josta eri ikkuna-luokat hakee tietonsa. Voisi ehkä mennä jotenkin näin:
A:ssa muuttuu jotain
Data.setJotain("jotain");
// Data-luokan metodissa setJotain
jotain = str;
teeJotain(); // dataa käsitellään Data-luokassa
...
updateAll(); // päivittää kaikki ikkunat
Siis jokaisessa Datan set-metodissa tuo updateAll(). Tietysti Datassa pitää olla viittaukset kaikkiin ikkuna-luokkiin ja niissä taas viittaus Data-luokkaan. Toiminnallisuuden toteutat ko. ikkunan luokassa jossa toiminto tapahtuu. Tosin jos ja kun tuo updateAll() päivitää kaikkien ikkunoiden kaikki elementit, niin ohjelmasta saattaa tulla hidas tai "nykivä", jolloin joudut tekemään erityiset updateSejaSe()-metodit.
Tämä oli pikaisesti mietitty ratkaisu, joten en takaa mitään : ) Joku ongelmahan tostakin saattaa nostaa rumaa päätään. Toivottavasti tästä oli ennemmän apua kuin haittaa.