import java.awt.Color; import javax.swing.JLabel; import javax.swing.JFrame; public class Esimerkki {
private void varikkaanEtiketinLisays() {
etiketti.setForeground(Color.RED); kehys.add(etiketti); } |
Staattisten kenttien värivalikoima on kuitenkin varsin pieni ja omaa sävyä voi etsiä joko brighter ja darker -metodeilla tai oman värin voi määrittää itse.
Täysin oman värin voi säätää punaisen, vihreän ja sinisen värin määrän mukaisesti. Haluamansa punaisen vihreän ja sinisen värin määrää voi arvioida jos kokeilee olemassa olevan värin osien määriä getRed, getGreen ja getBlue -metodeilla tai vaihtoehtoisesti voi etsiä sovelluksen, jossa värien määrää voi muunnella. Esimerkiksi Macissä Seashore-piirrustusohjelmassa väriä valitessa näkee RGB-määrät.
Color-luokan konstruktori sallii myös läpinäkyvyyden määrittämisen.
import java.awt.Color; import javax.swing.JLabel; import javax.swing.JFrame; public class Esimerkki {
private void varikkaanEtiketinLisays() {
Color vari = Color.RED; etiketti.setForeground(vari.darker().darker()); kehys.add(etiketti);
JLabel omaEtiketti = new JLabel();
} |
Graphics-olion saa käsiinsä esimerkiksi määritellessään uudelleen komponenttien piirtotavan, mutta tästä enemmän hetken kuluttua.
Toinen tapa miten Graphics oliolla pääsee piirtämään on jos ikkunaa luodessa ei käytä komponentteja vaan piirtää kaiken suoraan ikkunaan. Suositellumpi tapa on käyttää komponentteja ja omasta kokemuksesta voin sanoa, että komponenttien kanssa koodista tulee paljon siistimpi ja laajennettavampi/päivitettävämpi. Tässä kuitenkin esimerkki Graphics-olion käytöstä:
import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; public class Esimerkki extends JFrame {
this.setPreferredSize(250, 600); this.getContentPane().setBackground(Color.BLACK); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); this.repaint(); public void paint(Graphics g) {
g.fillOval(40, 200, 170, 170); g.setColor(Color.BLACK); g.drawOval(40, 200, 170, 170);
g.setColor(Color.WHITE); |
Idea siis on, että ikkunan kuva saadaan päivittymään repaint-metodilla ja tällöin kutsutaan paint-metodia.
Itse koodissa olen piirtänyt ensin sinisen väritetyn ympyrän ja sitten piirtänyt mustat reunat sille. Tämän jälkeen on vielä valkoisella piirretty sivun ylälaitaan teksti "Otsikko".
Useimmat Graphics olion muodoista ovat hyvin yksinkertaisia. Hieman monimutkaisempia kuvioita voi piirtää draw/fillPolygon-metodeilla, joilla voi piirtää monikulmioita. Tällöin kulmien koordinaatit annetaan kahtena listana, x- ja y-koordinaatit erikseen.
Kuvista lisää täällä.
Seuraavana esimerkki, jossa luodaan JLabelin kaltainen komponentti jonka teksti on aina oletuksena tumman harmaa ja teksti on ympäröity mustalla kehyksellä.
import java.awt.Color; import java.awt.Graphics; import javax.swing.JLabel; public class Etiketti extends JLabel {
this.setForeground(Color.DARK_GRAY);
@Override
g.setColor(Color.BLACK); |
Kuten esimerkistä näkyy, Etiketti perii JLabelin. Tämän lisäksi JLabelin konstruktoria kutsutaan Etiketin konstruktorissa. Konstruktorissa jo määritetään yksi Etiketin poikkeavuus JLabelista eli teksti tulee automaattisesti aina tumman harmaaksi. Toinen poikkeavuus tehdään paintComponent-metodissa, koska JLabeliin ei alun perin liity mitään kehystä. (paintComponent-metodissa määritetään siis miten komponentti piirretään aina kun ikkunaa päivitetään.)
paintComponent-metodissa kutsutaan ensin JLabelin paintComponent-metodia, koska tekstin piirtäminen itse JLabeliin olisi turhaa ja joissain tapauksissa työlästäkin. Yläluokan metodia ei ole toki mikään pakko kutsua jos haluaa toteuttaa piirron kokonaan itse. JLabelin piirrettyä itsensä piirretään vielä mustalla suorakulmio JLabelia ympäröimään. leveydestä ja korkeudesta on vähennetty yksi, koska niitä osia piirroksesta, jotka yltävät komponentin rajojen ulkopuolelle ei piirretä.
Viimeksi muokattu 1.7.2012