Gradienter er æstetisk tiltalende overgange mellem farver . Java behandler automatisk flere typer af gradienter mellem bruger specificerede farver. Du kan indstille en gradient som en farve, mens tegning i Java til at skabe figurer , tekst og andre objekter med en gradient effekt. Hvis Javas standard gradient klasser ikke er fleksible nok , kan du behandle dine egne farveforløb i Java med indlejrede løkker . GradientPaint Class
GradientPaint klassen giver den mest ligetil metode til at skabe en simpel gradient . GradientPaint s konstruktør accepterer to punkter , to farver og en valgfri boolean værdi . Den resulterende gradient vil skifte fra den første farve på det første punkt på den anden farve på det andet punkt. Hvis du passerer den booleske værdi sande , vil gradient gentage gradient i begge retninger forbi start-og slutpunkter , hvilket skaber et cyklisk mønster . En GradientPaint objekt, der cykler gennem blå og hvid er instantieres som sådan : Hej
GradientPaint p = new GradientPaint (ny punkt (0,0) , Color.BLUE , nye punkt ( 100,100 ) , Color.WHITE , true) ;
LinearGradientPaint Class
LinearGradientPaint ligner GradientPaint , men det kan skabe en gradient gennem mere end to farver, og det giver brugerne mulighed for at definere, hvor bred hver farvede sektion af gradienten bør være . LinearGradientPaint s konstruktør accepterer to punkter , en vifte af flydere , en vifte af farver og en valgfri værdi for at angive , hvordan forløbet skal cykle gennem farver . Hver float værdi svarer til en farve og indikerer på hvilket tidspunkt i forløbet , at farven skal være fremherskende. For eksempel bør hvis gradienten skal være blå en tredjedel af vejen gennem sin cyklus 0.3f svarer til farven blå . En LinearGradientPaint objekt, der skaber en gradient gennem blå, sort og hvid uden at gentage bruger følgende constructor : Hej
float [ ] x = { 0.0f , 0.3f , 1.0F }; Color [ ] c = { Color . BLACK , Color.BLUE , Color.WHITE }; LinearGradientPaint lp = new LinearGradientPaint (ny punkt (0,0) , nye punkt ( 100,100 ) , x, c)
RadialGradientPaint Class
RadialGradientPaint skaber cirkulære gradienter strækker sig ud fra et enkelt punkt. Dens constructor tager et enkelt punkt , der repræsenterer midten af cirklen , en float værdi, som repræsenterer cirklens radius , en vifte af flydere til at repræsentere hastigheden af ændringen mellem farver og en vifte af farver. Eventuelt kan den acceptere et fokuspunkt , der skifter i midten af gradient til at skabe elliptiske farveforløb og en værdi til at bestemme, hvordan gradient cykler gennem farver . Instantiere en RadialGradientPaint objekt svarer til at oprette en LinearPaintObject : Hej
float [ ] x = { 0.0f , 0.3f , 1.0F }; Color [ ] c = { Color.BLACK , Color.BLUE , Color.WHITE }; LinearGradientPaint lp = new LinearGradientPaint (ny punkt ( 50,50 ) , ( float) 25 , x, c)
Maleri en Gradient
Du kan oprette mere omfattende tilpassede forløb i Java ved at behandle din egen gradient gennem indlejrede løkker . På hvert trin i sløjfen , oprette en ny farve baseret på din position i sløjfen . I den inderste løkke , tegne en firkant i en position defineret af din position i løkke i den aktuelle farve . Koden i eksemplet nedenfor opretter en gradient rektangel der begynder i punktet ( 0,0) , og er 400 pixels bredt og 500 pixels høj . Svømmeren værdsætter r1 , g1 og b1 definere r, g, b -værdier i den oprindelige farve. Værdierne r2 , g2 og b2 definere r, g, b -værdier for den anden farve. Den første sløjfe løber fra den initiale x-koordinat til bredden af rektanglet . Den indre løkke løber fra den første y -koordinat til højden af rektanglet . Således i den indre løkke , punktet ( i, j ) altid svarer til et andet punkt i gradienten rektangel. Hver gang programmet cykler gennem den indlejrede loop, det ændrer r og b -værdier som en brøkdel af den nuværende x -koordinat , jo tættere det punkt er at den oprindelige x-værdi , jo tættere r og b værdier vil være til deres oprindelige værdier . Programmet ændrer b værdi i forhold til den aktuelle y -koordinat , skaber den samme virkning på en anden akse . Det opretter derefter en ny farve fra den modificerede r, g, b værdier og trækker et rektangel på præcis én pixel i bredden og højden på det nuværende koordinater i den nye farve
int x = 0; . Int y = 0; int bredde = 400 ; int height = 500 , float r1 = 0; float g1 = 0; float b1 = 1 , float r2 = 1 , float g2 = 1 float b2 = 0; float rS = 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øjde j + + ) { float r, g , b , hvis ( 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 );}}