Takaisin luentomateriaaliin

Kuvien lisääminen

Kuvia lisättäessä tulee tietää kuvan osoite, kuva pitää hakea Image-olioon ja kuva tulee saada piirretyksi. Itse teen aina jar-paketteja, joten kuvien tulee olla haettavissa paketin sisältä. Kuvan saa haettua vaihtelevasta sijainnista kun hakee sen jonkun luokan sijainnin perusteella, mutta osoitteen voi myös itse kirjoittaa.

import java.net.URL;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.Graphics;

public class Esimerkki extends JButton {

    private Image kuva;

    private void haeKuva() {

      URL url = Esimerkki.class.getResource("Kuva.png");
      //URL url = new URL("src/Kuva.png");
      this.kuva = Toolkit.getDefaultToolkit().getImage(url);
    }

    @Override
    public void paintComponent(Graphics g) {

      int kuvanLeveys = this.getWidth();
      int kuvanKorkeus = this.getHeight();

      g.drawImage(this.kuva, 0, 0, kuvanLeveys, kuvanKorkeus, this);

    }
}

Eli tässä esimerkissä JButtonin piirtoasu on määritetty uudelleen.

Ensin haeKuva-metodissa määritetään URL Esimerkki.class-tiedoston sijainnin perusteella (Kun ohjelma käännetään .java-tiedostoista luodaan .class-tiedostoja. NetBeansissa class-tiedostot löytyvät paketin build>classes-kansiosta. Esimerkki löytyy ohjeesta, jonka olen tehnyt jar-pakettien luontiin). URL:n java-apin perusteella sen voi määritellä myös antamalla URL:n konstruktorille osoite String muodossa kuten olen kommenttiin laittanut. Tämän jälkeen työkalupakin kautta haetaan Image osoitteen perusteella.

Tämän jälkeen paintComponent-metodissa kuvan leveys ja korkeus voidaan kysyä JButtonilta. drawImage-metodissa parametrina annetaan kuva, x,y-koordinaatit kuvan vasemmalle yläkulmalle, kuvan mitat sekä komponentti, johon kuva lisätään. x,y-koordinaatit ovat esimerkissä 0,0 koska JButtonin sisällä koordinaatiston origo on JButtonin vasemmassa ylälaidassa eikä ikkunan vasemmassa ylälaidassa. Kuuntelevaksi komponentiksi kelpaa JButton, koska JButton on perinyt Component-luokan, joka toteuttaa rajapinnan ImageObserver. Itse en ole perehtynyt ImageObserverin merkitykseen tarkemmin, mutta javan apin Field Summaryn perusteella ImageObserver saa tietoa ainaskin ongelmista mitkä ovat ilmenneet kuvaa piirrettäessä.

Takaisin luentomateriaaliin


Viimeksi muokattu 30.6.2012