overgangar er estetisk tiltalende overganger mellom farger . Java behandler automatisk flere typer graderinger mellom brukeren spesifiserte farger. Du kan sette en gradient som en farge mens du tegner i Java for å lage figurer , tekst og andre objekter med en gradient effekt . Hvis Javas standard gradient klasser er ikke fleksibel nok , kan du behandle dine egne gradienter i Java med nestede løkker . GradientPaint Class
GradientPaint klassen gir den enkleste metoden for å skape en enkel gradient . GradientPaint konstruktør aksepterer to poeng, to farger og en valgfri boolsk verdi . Den resulterende gradienten vil flyttes fra den første fargen ved det første punktet til den andre farge i det andre punkt . Hvis du passerer den boolske verdien true , vil gradient gjenta gradient i begge retninger forbi start -og sluttpunkt , og skaper en syklisk mønster . En GradientPaint objekt som gjennomgår blått og hvitt er instansiert som sådan : en
GradientPaint p = new GradientPaint (new Point ( 0,0) , Color.BLUE , new Point ( 100100 ) , Color.WHITE , true) ;
LinearGradientPaint Class
LinearGradientPaint er lik GradientPaint , men det kan skape en gradient gjennom mer enn to farger, og det tillater brukerne å definere hvor bred hver farget del av stigningen skal være. LinearGradientPaint konstruktør aksepterer to punkter , en rekke flyter , en rekke farger og en valgfri verdi som angir hvordan gradient burde gå gjennom farger. Hver flottør verdien tilsvarer en farge og indikerer på hvilket punkt i den gradient som fargen bør være dominerende . For eksempel bør hvis gradient skal være blå en tredjedel av veien gjennom sin syklus 0.3f samsvarer med fargen blå. En LinearGradientPaint objekt som skaper en gradient gjennom blå, svart og hvitt uten å gjenta bruker følgende konstruktør : en
float [ ] x = { 0.0f , 0.3f , 1.0f }; Color [ ] c = { Color . BLACK , Color.BLUE , Color.WHITE }; LinearGradientPaint lp = new LinearGradientPaint (new Point ( 0,0) , new Point ( 100100 ) , x , c ) ;
RadialGradientPaint Class
RadialGradientPaint skaper sirkulære gradienter som strekker seg ut fra et enkelt punkt . Dens konstruktør tar et enkelt punkt som representerer sentrum av sirkelen , en flottør verdi som representerer radien til sirkelen , en rekke flottører som representerer endringshastigheten mellom farger og en rekke farger . Alternativt kan det godta et fokuspunkt som forskyver sentrum av gradient å skape elliptiske graderinger og en verdi for å bestemme hvordan gradient sykluser gjennom farger . Instantiating en RadialGradientPaint objekt er lik skape en LinearPaintObject : en
float [ ] x = { 0.0f , 0.3f , 1.0f }; Color [ ] c = { Color.BLACK , Color.BLUE , Color.WHITE }; LinearGradientPaint lp = new LinearGradientPaint (new Point ( 50,50 ) , (float ) 25 , x , c ) ;
Maleri en Gradient
Du kan opprette mer forseggjort tilpasset gradienter i Java ved å behandle din egen gradient gjennom nestede løkker . På hvert trinn i loop, opprette en ny farge, avhengig av din posisjon i loop. I den innerste løkken , tegne en firkant på en posisjon definert av din posisjon i loop i den aktuelle fargen. Koden i eksempelet nedenfor lager en gradient rektangel som begynner i punktet ( 0,0) og er 400 piksler bred og 500 piksler høyt . Flottøren verdsetter r1 , g1 og b1 definere r , g og b verdiene av den første fargen. Verdiene r2 , g2 og b2 definere r , g og b verdier for den andre fargen . Den første sløyfen går fra den første X-koordinat til bredden av rektangelet. Den indre sløyfe løper fra den første Y-koordinaten til høyden på rektangelet. Derfor, i den indre sløyfe , tilsvarer punktet ( i, j ) alltid til et annet punkt i den gradient rektangelet. Hver gang programmet går gjennom den nestede loop, endrer det r & b -verdier som en brøkdel av dagens x koordinat , jo nærmere det punktet er den første x-verdien er, desto nærmere r & b -verdier vil være til sine opprinnelige verdier . Programmet modifiserer b verdi i forhold til den nåværende Y-koordinaten , og skaper den samme virkning på en annen akse. Det skaper deretter en ny farge fra den modifiserte r , g og b verdier , og tegner et rektangel av nøyaktig én piksel i bredden og høyden på dagens koordinat i den nye fargen
int x = 0; . Int y = 0 ; int width = 400 ; int height = 500 ; float r1 = 0; float g1 = 0; float b1 = 1; float r2 = 1; float g2 = 1; float b2 = 0; float retten = Math.abs ( r2 - r1 ), float gS = Math.abs ( g2 - g1 ) ; float bS = Math.abs ( b2 - b1 ); for ( int i = x ; i < bredde; i + + ) { for ( int j = y ; j < høyde ; j + + ) { float r , g, b; if ( r1 < r2) {r = ( ( (RS ) /bredde) * i) + r1 ;} else { r = ( r1 - ( (RS ) /bredde) * i) ;} if ( g1 < g2 ) { g = ( ( (GS ) /bredde) * i) + g1 ;} else { g = ( g1 - ( (GS ) /bredde) * i) ;} if ( b1 < r2) {b = ( ( (BS) /bredde) * i) + b1 ;} else { b = ( b1 - ( (BS) /bredde) * i) ;} Color c = new Color (r, g , b, (float ) 0,5), g2d.setColor ( c ) ; g2d.fillRect (i, j , 1 , 1 ); } }