Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: vain tietyn kuvan uudestaan piirtäminen

jumitusta [27.02.2010 12:57:16]

#

Olisiko jollain ideaa, millä tavalla olisi paras toteuttaa sellainen, että JAppletissa olisi kuvia, mutta vain tiettyjä kuvia muutettaisiin, muut pysyisivät kokoajan samana ja niitä ei piirrettäisi uudestaan ollenkaan, eli siis ei puhdistettaisi koko ruutua ja piirrettäisi kaikkia uudestaan vaan vain ne tietyt kuvat piirrettäisiin uudestaan.

Oon ton kans tapellu Googlen kans aika paljon...yks puolitiessä oleva idea on että on 2 JPanelia(JPanel1, JPanel2) joihin piirretään kuvat, sitten lisätään ne JFrameen(JFrame1). Kun halutaan muuttaa vaan toista(JPanel2), piirretään JPanel2 uudestaan ja suoritetaan käsky JFrame1.remove(JPanel2) ja lisätään taas JPanel2 JFrame1:een.

Toimiiko tuo noin, vai pitääkö JFrame1 jotenkin päivittää ton jälkeen? Ja päivittääkö se taas koko ruudun sitten? eli ei siis auta mitään?

Entäs repaintmanageri? voisko sitä käyttää tossa? Itse en tajua siitä mitään...

Pointtina on että jos joskus tarvii nopeutta ohjelmaan, niin käsittääkseni aika hidasta putsata koko ruutu ja sit piirtää taas monta kuvaa sinne, kun vois vaan piirtää vaikka pari uudestaan ja muut pysyy...

Metabolix [27.02.2010 13:04:59]

#

Erillisten JPanelien käyttö on tosiaan helppo ratkaisu. Niitä ei suinkaan tarvitse poistella, vaan paneelin repaint-metodin kutsuminen riittää. Ja piirtäminenhän pitää tehdä metodissa paintComponent, jota järjestelmä kutsuu automaattisesti aina tarvittaessa eli jos kutsutaan repaint-metodia tai jos esimerkiksi komponentin koko muuttuu.

Jos kuvia on kovin paljon, ohjelmasta voi tulla paneeleilla raskas. Silloin pitää muutosten yhteydessä kutsua repaint-metodia oikeilla parametreilla, jotka määräävät päivitettävän alueen, ja paintComponent-metodissa pitää sitten piirtää vain Graphics-olion getClip-metodin palauttaman muodon (tai getClipBounds-metodin palauttaman suorakulmion) sisään osuvat kuvat, mikä voi vaatia jonkin verran laskuja. Onneksi on myös metodi hitClip, joka hoitaa näppärästi suorakulmaiset laskut.

jumitusta [28.02.2010 19:38:25]

#

OK, kiitos tedoista.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta