![]() |
![]() |
Start på kapittel om grafiske brukergrensesnitt |
Farger defineres i java som objekter av klassebibliotekets klasse
Color
,
som ligger i pakken java.awt
. Hver farge
er satt sammen av tre fargekomponenter: rød, grønn og blå. I tillegg har
fargen en såkalt alfa-verdi som bestemmer i hvilken grad fargen er
gjennomsiktig. Alle disse fire parametrene kan ha int
-verdier fra
0
til 255
, eller float
-verdier
fra 0.0F
til 1.0F
.
Fargekomponentene må vi bestemme i form av konstruktørparametre når vi
oppretter Color
-objektene. Rekkefølgen for parametrene er den
samme som rekkefølgen fargene er nevnt i ovenfor.
Parameterkombinasjonen (0, 0, 0)
gir
svart farge, mens kombinasjonen (255, 255, 255)
gir hvit. Alfa-verdien kan vi
angi som en fjerde konstruktørparameter. Dersom vi lar være, vil den få
verdi 1.0F
, noe som medfører at fargen blir fullstendig ugjennomsiktig. Alfa-verdi
lik 0
gir en fullstendig gjennomsiktig farge.
For et gitt Color
-objekt kan vi få tak i verdiene til de
fire parametrene ved kall på metodene getRed, getGreen, getBlue,
getAlpha
.
Parameterverdiene blir da returnerte i form av int
-verdier.
I praksis er det vanskelig å vite hvordan en farge blir ved at vi velger
verdier for de fire parametrene direkte. Det er enklere å gå ut fra
Color
-klassens static
-objekter for standardfargene:
Color.BLACK, Color.BLUE, Color.CYAN, Color.DARK_GRAY, Color.GRAY,
Color.GREEN, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, Color.PINK,
Color.RED, Color.WHITE, Color.YELLOW
. (En kan bruke store eller små
bokstaver i fargenavnene.) Ut fra et gitt Color
-objekt kan vi få
en mørkere eller lysere nyanse av samme fargen ved å gjøre kall på
henholdsvis objektets metode darker
eller brighter
.
Disse returnerer et nytt Color
-objekt som representerer den nye
fargen. For å øke effekten med å endre fargenyanse, kan vi gjøre kall på
metodene flere ganger etter hverandre.
For grafiske skjermkomponenter (knapper, tekstfelter etc.) kan vi sette
bakgrunnsfarge ved kall på komponentens metode setBackground
,
der vi bruker ønsket Color
-objekt som parameter ved kallet.
Forgrunnsfarge kan vi sette på tilsvarende måte ved kall på metoden
setForeground
. Forgrunnsfargen brukes ved utskrift av tekst og
figurer på komponenten (for eksempel knappetekst).
I JFrame
-vinduer (og i appleter) er det mulig å skrive ut
tekst, samt tegne ut rette linjer, rektangler, ovaler etc. ved å legge
inn passende instruksjoner i vinduets (eller appletens) paint
-metode.
Bedre er det imidlertid å definere egne tegneflater for dette formål. Hvordan
dette gjøres, skal vi se nærmere på seinere. (Se notatet
Panel brukt som tegneflate.)
I denne omgang skal vi tegne ut
grafikken rett på vindusflata. Hensikten er bare å demonstrere hvordan vi kan
velge tegnefarge.
paint
-metoden har en parameter av type
Graphics
(definert i pakken java.awt
). Det er denne parameteren som
brukes for å gjøre kall på de forskjellige metodene for uttegning av grafikk.
Dersom vi ikke bestemmer noe annet, vil det bli brukt svart farge på utskriften. Vi har
imidlertid mulighet for å sette tegnefarge for paint
-metodens
Graphics
-parameter ved bruk av dens setColor
-metode,
og vi kan endre fargen så mange ganger vi vil mens paint
-metoden
blir utført. Når vi har satt en farge, blir denne brukt på utskriften inntil vi
setter en annen farge. Uttrykt i pseudo-kode kan derfor en paint
-metode
se ut som dette:
public void paint( Graphics g ) { g.setColor( < Color-objekt > ); < tegne- og/eller skrive-instruksjoner > g.setColor( < annet Color-objekt > ); < nye tegne- og/eller skrive-instruksjoner > ... }
(Den tidligere nevnte metoden setForeground
kan ikke brukes
til å skifte forgrunnsfarge under veis.)
Vindusklassen
Fargevisning.java
som er gjengitt nedenfor demonstrerer noen farger og
noen konstruktører for Color
-klassen. Det blir også vist hvordan
det i paint
-metoden kan skiftes farge under veis. Det er også vist hvordan
alfa-parameteren påvirker gjennomsiktighet for farge. Vi ser blant annet at når
fargen er fullstendig gjennomsiktig, så forsvinner hele fargen. Driverklasse
for programmet finnes i fila Fargetest.java
.
Når vi kjører programmet, får vi vist følgende vindu:
For de tre siste fargene skriver programmet først fargens navn med svart skrift.
Deretter skiftes det til den fargen rektanglet skal tegnes med, og dette
tegnes oppå utskriften av fargenavnet. Vi ser at for rektanglet med farge
MAGENTA
synes ikke fargenavnet i det hele tatt, fordi fargen har
alfa-verdi lik 255 og dermed er fullstendig ugjennomsiktig. Rødfargen som
følger etterpå har alfa-verdi 180. Der synes fargenavnet RØD
svakt
gjennom fargen. Det siste rektanglet har også rød-farge, men den er fullstendig
gjennomsiktig siden den har alfa-verdi lik 0. Fargen til rektanglet synes
derfor ikke i det hele tatt, vi ser bare bakgrunnsfargen, samt fargenavnet
RØD
som her synes helt klart og tydelig.
Når det gjelder metoden fillRect
for tegning av et rektangel
fylt med vedkommende tegnefarge, angir de to
første parametrene plasseringen av rektanglets øverste venstre hjørne, målt i
antall piksler fra venstre kant og øverste kant i vinduet. De to siste
parametrene angir rektanglets bredde og høyde målt i antall piksler.
(Tilsvarende metode for å tegne et åpent rektangel, er
drawRect
.) I metoden drawString
for utskrift av
tekst, angir første parameter vedkommende tekst, mens de to siste gir plassering
av tekstens nederste venstre hjørne i forhold til vinduets øverste venstre
hjørne, målt i antall piksler.
1 import java.awt.*; 2 import javax.swing.*; 3 4 public class Fargevisning extends JFrame 5 { 6 public Fargevisning() 7 { 8 super( "Bruk av farger" ); 9 setSize( 450, 250 ); 10 setVisible( true ); 11 } 12 13 // tegner rektangler og skriver ut tekst med bruk av 14 //forskjellige farger 15 public void paint( Graphics g ) 16 { 17 super.paint( g ); 18 19 // setter ny tegnefarge ved å bruke heltall som 20 //konstruktørparametre 21 g.setColor( new Color( 255, 0, 0 ) ); 22 g.fillRect( 25, 50, 100, 20 ); 23 g.drawString("Aktuelle verdier for RGB: " + g.getColor(),130,65); 24 25 // setter ny tegnefarge ved å bruke float-verdier som parametre 26 g.setColor( new Color( 0.0f, 1.0f, 0.0f ) ); 27 g.fillRect( 25, 75, 100, 20 ); 28 g.drawString("Aktuelle verdier for RGB: " + g.getColor(),130,90); 29 30 // setter ny tegnefarge ved å bruke et static Color-objekt 31 //som parameter 32 g.setColor( Color.BLUE ); 33 g.fillRect( 25, 100, 100, 20 ); 34 g.drawString("Aktuelle verdier for RGB: " + g.getColor(),130,115); 35 36 // henter ut individuelle RGB-verdier 37 g.setColor( Color.BLACK ); 38 g.drawString( "MAGENTA", 30, 145 ); 39 Color color = Color.MAGENTA; 40 g.setColor( color ); 41 g.fillRect( 25, 125, 100, 20 ); 42 g.drawString( "RGB-verdier: " + color.getRed() + ", " + 43 color.getGreen() + ", " + color.getBlue(), 130, 140 ); 44 g.drawString( "Alfa-verdi: " + color.getAlpha(), 130, 155 ); 45 46 // demonstrerer gjennomsiktighet 47 g.setColor( Color.BLACK ); 48 g.drawString( "RØD", 30, 180 ); 49 color = new Color( 255, 0, 0, 180 ); 50 g.setColor( color ); 51 g.fillRect( 25, 165, 100, 20 ); 52 g.drawString( "RGB-verdier: " + color.getRed() + ", " + 53 color.getGreen() + ", " + color.getBlue(), 130, 180 ); 54 g.drawString( "Alfa-verdi: " + color.getAlpha(), 130, 195 ); 55 56 g.setColor( Color.BLACK ); 57 g.drawString( "RØD", 30, 220 ); 58 color = new Color( 255, 0, 0, 0 ); 59 g.setColor( color ); 60 g.fillRect( 25, 205, 100, 20 ); 61 g.setColor( Color.BLACK ); 62 g.drawString( "RGB-verdier: " + color.getRed() + ", " + 63 color.getGreen() + ", " + color.getBlue(), 130, 220 ); 64 g.drawString( "Alfa-verdi: " + color.getAlpha(), 130, 235 ); 65 } 66 }
JColorChooser
I klassebibliotekets javax.swing
-pakke finnes klassen
JColorChooser
.
Denne definerer en dialogboks som kan brukes til å velge farge.
Fra og med javaversjon 7 er funksjonaliteten til JColorChooser
blitt utvidet.
Den gir nå bl.a. mulighet til å velge farge på fem forskjellige måter, mens det i
tidligere javaversjoner var begrenset til tre måter. De forskjellige måtene å
velge farge på kommer fram ved at man i dialogboksen kan velge mellom
fem forskjellige fanekort. Valgmulighetene er vist på bildene nedenfor.
(Hvilke farger som vises i boksen er avhengig av hvilke
innstillinger som er gjort.)
I den første av valgmuligheten blir det vist et rutenett av fargeprøver som man kan velge blant ved å klikke på dem, som vist på følgende bilde:
På neste bilde vises muligheten kalt HSV for å velge farge. HSV står for Hue-Saturation-Value. (Før JDK7 ble denne kalt HSB, for Hue-Saturation-Brightness.)
Så følger muligheten kalt HSL, forkortelse for Hue-Saturation-Lightness. Denne er ny i JDK7.
I alternativet RGB, vist under, velger man farge etter Rød-Grønn-Blå-fargemodellen.
Det siste alternativet, CMYK, er også nytt i JDK7. Med det velger man farge etter den såkalte fire-farge-modellen. Betegnelsen CMYK er et derivat fra de engelske navnene på primærfargene: Cyan, Magenta, Yellow og blacK/Key-color.
I alle de fem tilfellene velges farge ved at man først gjør de innstillingene
man ønsker, og deretter klikker på dialogboksens OK-knapp. Boksen vil da lukke
seg, og valgt farge blir returnert i form av et Color
-objekt. Dersom
det blir klikket på Cancel-knappen eller lukkeknappen, vil det bli returnert
null
.
Instruksjonen for å vise en slik dialogboks for valg av farge
kan uttrykkes på følgende måte i pseudo-kode:
Color valgtFarge = JColorChooser.showDialog( < foreldervindu >, //referanse til forelder-vinduet "Velg en farge", // tekst som kommer på dialogboksens tittellinje startfarge ); // forhåndsvalgt Color-objekt, fåes tilbake ved // klikk på dialogboksens Reset-knapp.
I programmet Fontstiler
som står under omtalen av
fonter i neste avsnitt blir det brukt en JColorChooser
til å velge
farge på utskriften.
JColorChooser
inneholder også en god del annen funksjonalitet som det er mulig å programmere.
En nærmere omtale av dette finnes i
omtalen
av JColorChooser
i The Java Tutorials.
Copyright © Kjetil Grønning og Eva Hadler Vihovde, revidert 2014
![]() |
![]() |
Start på kapittel om grafiske brukergrensesnitt |