Jeśli opanujesz Java Abstract Toolkit, konieczne będzie poznanie zastosowań klasy Java AWT Color. Ponieważ zaangażowanych jest wiele konstruktorów i metod, na początku może to wydawać się trudne do opanowania. Ale nie martw się, mamy wszystko pod kontrolą:) Dzięki temu pełnemu opisowi Java AWT Color dowiesz się, jak szybko utworzyć nowy typ koloru i nim zarządzać. Zaoferujemy również kilka testów praktycznych, które pomogą ci doskonalić swoje umiejętności.

Czym jest klasa kolorów AWT w Javie?

Głównym celem AWT Color jest umożliwienie programistom tworzenia nowych kolorów za pomocą kodu Java przy użyciu pakietów RGB (czerwony, zielony, niebieski), RGBA (czerwony, zielony, niebieski, alfa) lub HSB (odcień, nasycenie, komponenty BRI). Klasa zawiera dwie wartości — kod odcienia oraz wartość krycia/przezroczystości. Oto jak deklaruje się klasę java.awt.Color:

public class Color
   extends Object
      implements Paint, Serializable
Aby zadeklarować różne typy kolorów za pomocą Class.java.awt.Color, programiści używają konstruktorów — przyjrzymy się im teraz.

Konstruktory AWT.Color w Javie

W zależności od parametru koloru, który chcesz utworzyć, trzeba będzie użyć określonego typu konstruktora koloru. Jest ich kilka — przyjrzyjmy się im po kolei.
  • Color(float r, float g, float b) jest klasą używaną do definiowania koloru w schemacie kolorów RGB, który jest nieprzezroczysty. Zakres kolorów można określić w dowolnym miejscu z przedziału od 0,0 do 0,1.

  • Color(float r, float b, float g, float a) to klasa, która definiuje kolor RGBA (zakres dostępnych wartości to 0,0 i 0,1).

  • Color(ColorSpace c, float[], co, float a) definiuje kolor w podanej wcześniej przestrzeni barw ColorSpace. Programista określa zakres składników koloru w tablicy float o zdefiniowanej alfa.

  • Color(int, rgb) to klasa tworząca kolor RGB (nieprzezroczysty). Należy zwrócić uwagę na wartość składową konstruktora — 16-23 dla koloru czerwonego, 8-15 dla zielonego, 0-7 dla niebieskiego.

  • Color(int r, int g, int b) — metoda służąca do definiowania nieprzezroczystego koloru RGB. Wartość koloru powinna mieścić się w zakresie od 0 do 255.

  • Color(int r, int g, int b, int a) — tworzy kolor w schemacie RGBA (0-255).

  • Color(int rgba, boolean b) służy do tworzenia kolorów sRGB w ramach określonej łącznej wartości. Zakres wartości wynosi 24-31 dla alfy, 16-23 dla czerwieni, 8-15 dla zieleni i 0-7 dla niebieskiego.

Poza tym class.awt.color operuje na polach odziedziczonych po Java.awt.Transparency:
  • TRANSLUCENT określa, czy kolor zawiera wartości alfa i ma dwie wartości — 0 i 1.

  • OPAQUE przypisuje obiektowi wartość alfa równą 1, gwarantując jego całkowitą nieprzezroczystość.

  • BITMASK oznacza wartość bezwzględnej nieprzezroczystości lub przezroczystości i mieści się w zakresie (0;1), gdzie 0 oznacza pełną przezroczystość, natomiast 1 — skrajną nieprzezroczystość.

15 najlepszych metod do użycia z klasą Java AWT Color

Aby manipulować kolorem, dostosować jego ciemność lub jasność, programiści Javy używają różnych metod. Jest ich kilkadziesiąt, więc nie trzeba uczyć się ich wszystkich na pamięć. Jednak jeśli chodzi o najczęściej używane metody Java AWT Color, zawęziliśmy listę do piętnastu. Zapamiętanie ich bez konieczności odwoływania się do dokumentacji Java API byłoby pomocne dla programistów.

darker()

Metoda ta służy do tworzenia nowego koloru, który jest ciemniejszą wersją koloru już zdefiniowanego. Przykład:

Color.green.darker()
Jeśli jednokrotne zastosowanie metody darker() nie wystarczy, aby uzyskać pożądany odcień, możesz powtórzyć tę metodę tyle razy ile chcesz, tak jak pokazano poniżej:

Color.green.darker().darker().darker().darker().darker()

brighter()

Jak sama nazwa wskazuje, Color brighter() służy do rozjaśniania odcieni, które już posiadamy. Podobnie jak w przypadku darker(), można jej użyć wiele razy dla jednego koloru. Przykład:

Color myColor = Color.RED;          

    JLabel label = new JLabel("First Name");
    label.setForeground(myColor.brighter());

int getAlpha()

Jeśli chcesz zwrócić składową alfa swojego koloru, użyj tej metody. Należy pamiętać, że wartości alfa mieszczą się w zakresie 0-255. Oto przykład zastosowania i zwrotu metody. Przykład:

alpha = Color.black.getAlpha();
return new Color(components[0], components[1], components[2], alpha);

static Color getColor(String nm)

Programiści Java mogą użyć tej metody do zlokalizowania koloru za pomocą właściwości systemowych. Istnieją inne metody pozwalające osiągnąć podobne cele:
  • static Color getColor(String nm, int v)
  • static Color getColor(String nm, Color v)

static Color decode (string nm)

Ta metoda służy do wyświetlania koloru jako ciągu. Po zakończeniu konwersji programista otrzyma zdefiniowany kolor nieprzezroczysty. Przykład:

public static Color decodeColor(String hexColor) {

 return Color.decode(hexColor);

PaintContext createContext(ColorModel cm, Rectangle r, Rectangle2D r2d, AffineTransform xform, RenderingHints hints)

Ta metoda wygląda na skomplikowaną, lecz jest łatwiejsza do zastosowania, niż się wydaje. Paint Context CreateContext() służy do definiowania powtarzającego się wzoru jednolitego koloru. Przykład:

 public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, Rectangle2D userBounds,

                  AffineTransform xform, RenderingHints hints)

 {
   try
   {
     return new AxialShadingContext(shading, cm, xform, matrix, deviceBounds);
   }
   catch (IOException e)

   {

     LOG.error("An error occurred while painting", e);

     return new Color(0, 0, 0, 0).createContext(cm, deviceBounds, userBounds, xform, hints);

   }
 }
}

float[] getComponents(ColorSpace cspace, float[] compArray)

Jest to metoda Java, którą można zastosować do koloru, aby zwrócić jego tablicę float i składowe alfa. Metoda ma zastosowanie przy danym ColorSpace zdefiniowanym przez cspace. Przykład:

public float[] getComponents(ColorSpace cspace, float[] compArray) {

return myColor.getComponents(cspace, compArray);

}

ColorSpace getColorSpace()

Programiści Java mogą użyć tej metody do zwrócenia przestrzeni kolorów dla wybranego koloru. Innym sposobem uzyskania przestrzeni kolorów dla danego wpisu jest zastosowanie Arrays.to.String. Jest to bardziej złożona strategia, jak widać na poniższym przykładzie: Przykład:

public class Main {
  public static void main(String[] args) {

    Color myColor = Color.RED;          

    System.out.println(Arrays.toString(myColor.getComponents(ColorSpace.getInstance(ColorSpace.CS_CIEXYZ),null)));

getHSBColor(float h, float s, float b)

Programiści Java stosują tę metodę do tworzenia nowego obiektu koloru na podstawie wartości modelu HSB. Przykład:

 private Color colorAt(int y)

 {
   return Color.getHSBColor(1 - (float) y / (height - 1), 1, 1);
 }
}

getGreen()	returns the green component in the range 0-255 in the default sRGB space.

getGreen()

Ta metoda Java zwraca wartość składowej zielonej dla utworzonego koloru. Wszystkie wartości mieszczą się w zakresie odpowiadającym kolorowi zielonemu w schemacie kolorów RGB. Przykład:

Color clickBoxColor = new Color(color.getRed(), color.getGreen(), color.getBlue(), 20);

getRed()

Podobnie jak getGreen(), getRed zwraca wartość składowej czerwonej danego koloru. Sposób zastosowania tej metody został już pokazany w powyższym przykładzie.

getBlue()

Ta metoda zwraca wartość koloru niebieskiego w zakresie wartości schematu kolorów RGB. Podobnie, przykład użycia getBlue() znajduje się w opisie funkcji getGreen().

getAlpha()

Metoda getAlpha() jest używana w Javie, gdy programista chce znaleźć wartość alfa danego koloru. Podobnie jak w przypadku RBG, wartości alfa wszystkich kolorów mieszczą się w zakresie 0-255. Przykład: oto jak użyto getAlpha() jako części pętli.

int alpha = color.getAlpha();
	if (alpha != 255)
	{
		setStrokeAlpha(alpha);
		strokeAlphaSet = true;

getTransparency()

Ta metoda zwraca wartość przezroczystości określoną przez ciebie lub innego programistę dla danego koloru podczas jego tworzenia. Przykład:

public int getTransparency() {

return myColor.getTransparency();

boolean equals(Object obj)

Ta metoda jest bardzo przydatna w przypadku porównywania ze sobą dwóch kolorów. Dzięki niemu programiści Javy wiedzą, czy dwa kolorowe obiekty mają równe wartości. Przykład:

import java.awt.Color;
public class Main {
  public static void main(String[] a) {
    Color myBlack = new Color(0, 0, 0); // Color black
    Color myWhite = new Color(255, 255, 255); // Color white
    System.out.println(myBlack.equals(myWhite));
  }
}

equals(Object obj)

Podobnie jak boolean equals(Object obj), jest to metoda porównawcza. Używamy jej do określania, czy obiekty kolorowe są sobie równe. Przykład:

Object a = new Object(); Object b = new Object(); return(a.equals(b));
Klasa Java.Awt.Color - 1

Przewodnik po głównych kolorach używanych w Javie

Po zapoznaniu się z metodami manipulowania kolorami w Javie przyjrzyjmy się typom pól, z którymi będziemy pracować. Są to rzeczywiste kolory statyczne, które programiści Javy mogą zdefiniować. Kolor można zdefiniować, wpisując jego nazwę (upewnij się, że wpisujesz ją dokładnie tak, jak jest zapisana w oficjalnej dokumentacji) lub określając jego wartość RGB. Rzućmy okiem na palety używane przez programistów:
Nazwa pola Opis
static color black (BLACK) Definiuje kolor czarny
static color white (WHITE) Definiuje kolor biały
static color blue (BLUE) Służy do definiowania koloru niebieskiego
static color gray (GRAY) Definiuje kolor szary
static color darkgray (DARK_GRAY) Definiuje ciemniejszy odcień szarości
static color lightGray (LIGHT_GRAY) Definiuje jaśniejszy odcień szarości
static color green (GREEN) Służy do definiowania koloru zielonego
static Color magenta (MAGENTA) Definiuje odcień magenta
static Color pink (PINK) Definiuje różowy w Javie
static Color orange (ORANGE) Tworzy kolor pomarańczowy w Javie
static Color yellow (YELLOW) Służy do definiowania koloru żółtego
static Color red (RED) Definiuje kolor czerwony w Javie

Problemy praktyczne z wykorzystaniem AWT.Color w Javie

Czy czujesz, że masz solidne podstawy AWT Color w Javie? Sprawdźmy te umiejętności, rozwiązując kilka praktycznych problemów — tutaj trzeba będzie zastosować konstruktory i zwykłe metody, a także inne narzędzia Javy niezwiązane z kolorami. Problem praktyczny #1. Utwórz niestandardowy komponent umożliwiający użytkownikowi programu zmianę poziomów RGB w kolorze (podobny do RGBColorChooser). Upewnij się, że włączono getColor() do swoich komponentów. Ustaw komponent jako podklasę Panel, a nie aplet. Odpowiedź: jest to dość złożony problem – podzielmy go na wykonalne kroki:
  1. Przekształć RGBChooser w komponent.
  2. Dodaj nową procedurę do komponentu — getColor().
  3. Dodaj setColor(), aby ustawić kolor.
Poniżej znajduje się przykładowy kod, który dzięki temu otrzymujemy:

import java.awt.*;
    import java.awt.event.*;
    
    public class RGBChooserComponent extends Panel implements AdjustmentListener {
       
       private Scrollbar redScroll, greenScroll, blueScroll;   // Scroll bars.
       
       private Label redLabel, greenLabel, blueLabel;  // For displaying RGB values.
                     
                     
       private Canvas colorCanvas;  // Color patch for displaying the color.
                     
       public RGBChooserComponent() {  // Constructor.
       
           /*Now let’s add scrollbars with values from 0 to 255. */
           
           redScroll = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0, 265);
           greenScroll = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0, 265);
           blueScroll = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0, 265);
           
           /* Create Labels showing current RGB and HSB values. */
           
           redLabel = new Label(" R = 0");
           greenLabel = new Label(" G = 0");
           blueLabel = new Label(" B = 0");
           
           /* We are setting backgrounds for Scrollbars and Labels, so they get the default
              gray background of the applet. */
           
           redScroll.setBackground(Color.lightGray);
           greenScroll.setBackground(Color.lightGray);
           blueScroll.setBackground(Color.lightGray);
           
           redLabel.setBackground(Color.white);
           greenLabel.setBackground(Color.white);
           blueLabel.setBackground(Color.white);
           
           /* Establish a panel that would listen for changes to the Scrollbars' values */
           
           redScroll.addAdjustmentListener(this);
           greenScroll.addAdjustmentListener(this);
           blueScroll.addAdjustmentListener(this);
           
           /* Add a canva, the background color of which will always match the currently selected color. */
           
           colorCanvas = new Canvas();
           colorCanvas.setBackground(Color.black);
           
           /* Create the applet layout, which consists of a row of
              three equal-sized regions holding the Scrollbars,
              the Labels, and the color patch.  The background color
              of the applet is gray, which will show around the edges
              and between components. */
           
           setLayout(new GridLayout(1,3,3,3));
           setBackground(Color.gray);
           Panel scrolls = new Panel();
           Panel labels = new Panel();
           
           add(scrolls);
           add(labels);
           add(colorCanvas);
           
           /* Add the Scrollbars and the Labels to their respective panels. */
           
           scrolls.setLayout(new GridLayout(3,1,2,2));
           scrolls.add(redScroll);
           scrolls.add(greenScroll);
           scrolls.add(blueScroll);
           
           labels.setLayout(new GridLayout(3,1,2,2));
           labels.add(redLabel);
           labels.add(greenLabel);
           labels.add(blueLabel);
           
       } // end init();
       
       
       public Color getColor() {
              // Get the color currently displayed by the component.
           int r = redScroll.getValue();
           int g = greenScroll.getValue();
           int b = blueScroll.getValue();
           return new Color(r, g, b);
       }
       
       
       public void setColor(Color c) {
             // Set the component to display the given color.
             // (Ignore this if c is null.)
          if (c != null) {
             int r = c.getRed();      // Get the color levels from the color.
             int g = c.getGreen();
             int b = c.getBlue();
             redLabel.setText(" R = " + r);   // Set the labels.
             greenLabel.setText(" G = " + g);
             blueLabel.setText(" B = " + b);
             redScroll.setValue(r);        // Set the scrollbars.
             greenScroll.setValue(g);
             blueScroll.setValue(b);
             colorCanvas.setBackground(new Color(r,g,b));  // Set the canvas.
             colorCanvas.repaint();
          }
       }
       
       
       public Dimension getMinimumSize() {
              // Specify the minimum reasonable size of this component.
          return new Dimension(150,40);
       }
       
       
       public Dimension getPreferredSize() {
              // Specify the preferred size of this component.
          return new Dimension(280,80);
       }
       
    
       public void adjustmentValueChanged(AdjustmentEvent evt) {
               // This is called when the user has changed the values on
               // one of the scrollbars.  All the scrollbars are checked,
               // the labels are set to display the correct values,
               // and the color patch is reset to correspond to the new color.
           int r = redScroll.getValue();
           int g = greenScroll.getValue();
           int b = blueScroll.getValue();
           redLabel.setText(" R = " + r);
           greenLabel.setText(" G = " + g);
           blueLabel.setText(" B = " + b);
           colorCanvas.setBackground(new Color(r,g,b));
           colorCanvas.repaint();  // Redraw the canvas in its new color.
       } // end adjustmentValueChanged
    
       
       public Insets getInsets() {
              // The system calls this method to find out how much space to
              // leave between the edges of the applet and the components that
              // it contains.  I want a 2-pixel border at each edge.
          return new Insets(2,2,2,2);
       }
       
    }  // end class RGBColorChooser