CodeGym /Java-Blog /Germany /Java.Awt.Color-Klasse
Autor
Pavlo Plynko
Java Developer at CodeGym

Java.Awt.Color-Klasse

Veröffentlicht in der Gruppe Germany
Wenn du das Java Abstract Toolkit beherrschst, musst du die Anwendungen der Java AWT Color-Klasse lernen. Da es eine Menge Konstruktoren und Methoden gibt, kann es anfangs etwas einschüchternd wirken. Aber keine Sorge, wir greifen dir unter die Arme:) Mit diesem vollständigen Überblick über Java AWT Color lernst du, wie du im Handumdrehen einen neuen Farbtyp erstellen und verwalten kannst. Wir bieten dir außerdem einige Übungen an, die dir helfen, deine Fähigkeiten zu verbessern.

Was ist die AWT Color-Klasse in Java?

Der Hauptzweck von AWT Color ist es, Entwicklern die Möglichkeit zu geben, mit Java-Code neue Farben zu erstellen, indem sie RGB (Rot, Grün, Blau), RGBA (Rot, Grün, Blau, Alpha) oder HSB (Farbton, Sättigung, BRI-Komponenten) verwenden. Die Klasse enthält zwei Werte – den Code für den Farbton und den Wert für die Deckkraft/Transparenz. So deklarierst du die Klasse java.awt.Color:

public class Color
   extends Object
      implements Paint, Serializable
Um verschiedene Arten von Farben mit der Klasse java.awt.Color zu deklarieren, verwenden Entwickler Konstruktoren – wir werden sie uns jetzt ansehen.

AWT.Color-Konstruktoren in Java

Je nach dem Parameter der Farbe, die du erstellen willst, musst du einen bestimmten Typ von Color-Konstruktor verwenden. Es gibt eine Handvoll davon – sehen wir uns sie an.
  • Color(float r, float g, float b) ist die Klasse, die du verwendest, um eine Farbe im RGB-Farbschema ohne Transparenz zu definieren. Du kannst den Farbbereich zwischen 0,0 und 0,1 festlegen.
  • Color(float r, float b, float g, float a) ist die Klasse, die eine RGBA-Farbe definiert (der Bereich der verfügbaren Werte ist 0,0 und 0,1).
  • Color(ColorSpace c, float[], co, float a) definiert eine Farbe in dem ColorSpace, den du zuvor angegeben hast. Ein Entwickler gibt den Bereich der Farbkomponenten im Float-Array eines bestimmten Alphas an.
  • Color(int, rgb) ist eine Klasse, die eine RGB-Farbe (ohne Transparenz) erzeugt. Achte auf den Komponentenwert des Konstruktors – 16-23 für Rot, 8-15 für Grün, 0-7 für Blau.
  • Color(int r, int g, int b) – eine Methode, mit der du eine RGB-Farbe ohne Transparenz definieren kannst. Der Wert der Farbe muss zwischen 0 und 255 liegen.
  • Color(int r, int g, int b, int a) – erzeugt eine Farbe im RGBA-Schema (0-255).
  • Color(int rgba, boolean b) wird verwendet, um sRGB-Farben innerhalb eines bestimmten kombinierten Wertes zu erzeugen. Der Wertebereich erstreckt sich von 24-31 für Alpha, 16-23 für Rot, 8-15 für Grün und 0-7 für Blau.
Ansonsten arbeitet class.awt.color mit den Feldern, die von Java.awt.Transparency geerbt wurden:
  • TRANSLUCENT gibt an, ob die Farbe Alphawerte enthält oder nicht und hat zwei Werte: 0 und 1.
  • OPAQUE weist dem Objekt den Alphawert 1 zu und garantiert damit vollständige Deckkraft.
  • BITMASK steht für den absoluten Wert der Deckkraft oder Transparenz und liegt im Bereich von (0;1), wobei 0 für vollständige Transparenz und 1 für völlige Deckkraft steht.

Die 15 wichtigsten Methoden für die Java AWT Color-Klasse

Um eine Farbe zu manipulieren, ihre Dunkelheit oder Helligkeit anzupassen, greifen Java-Entwickler auf verschiedene Methoden zurück. Es gibt Dutzende davon, du musst sie also nicht alle auswendig lernen. Wenn es jedoch um die am häufigsten verwendeten Java AWT Color-Methoden geht, haben wir die Liste auf fünfzehn eingegrenzt. Für Entwickler wäre es hilfreich, wenn sie sich diese merken könnten, ohne auf die Java-API-Dokumentation zurückgreifen zu müssen.

darker()

Die Methode wird verwendet, um eine neue Farbe zu erstellen, die eine dunklere Version der bereits definierten Farbe ist. Beispiel:

Color.green.darker()
Wenn die einmalige Anwendung von darker() nicht ausreicht, um den gewünschten Farbton zu erzeugen, kannst du die Methode beliebig oft wiederholen, wie unten gezeigt:

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

brighter()

Wie der Name schon sagt, wird Color brighter()> verwendet, um den bereits vorhandenen Farbton aufzuhellen. Ähnlich wie darker() kann diese Funktion mehrmals pro Farbe verwendet werden. Beispiel:

Color myColor = Color.RED;          

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

int getAlpha()

Wenn du die Alphakomponente deiner Farbe zurückgeben willst, verwende diese Methode. Denke daran, dass die Alphawerte im Bereich von 0-255 liegen. Hier ist ein Beispiel für die Anwendung und Rückgabe der Methode. Beispiel:

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

static Color getColor(String nm)

Java-Entwickler können diese Methode verwenden, um eine Farbe mithilfe von Systemeigenschaften zu finden. Es gibt andere Methoden, die ähnliche Ziele verfolgen:
  • static Color getColor(String nm, int v)
  • static Color getColor(String nm, Color v)

static Color decode (string nm)

Mit dieser Methode wird eine Farbe als String angezeigt. Nachdem die Umwandlung abgeschlossen ist, erhält der Entwickler eine definierte Farbe ohne Transparenz. Beispiel:

public static Color decodeColor(String hexColor) {

 return Color.decode(hexColor);

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

Diese Methode sieht kompliziert aus, aber sie ist einfacher zu benutzen, als es scheint. Paint Context CreateContext() wird verwendet, um ein wiederholtes einfarbiges Muster zu definieren. Beispiel:

 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)

Dies ist eine Java-Methode, die du auf eine Farbe anwenden kannst, um deren Float-Array und Alpha-Komponenten zurückzugeben. Die Methode gilt für einen bestimmten ColorSpace, der durch cspace definiert ist. Beispiel:

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

return myColor.getComponents(cspace, compArray);

}

ColorSpace getColorSpace()

Java-Entwickler können diese Methode verwenden, um den Farbraum für eine ausgewählte Farbe zurückzugeben. Eine andere Möglichkeit, einen Farbraum für einen bestimmten Eintrag zu erhalten, ist die Anwendung von Arrays.to.String. Dies ist eine komplexere Strategie, wie das folgende Beispiel zeigt: Beispiele:

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)

Java-Entwickler wenden diese Methode an, um ein neues Farbobjekt basierend auf den Werten des HSB-Modells zu erstellen. Beispiel:

 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()

Diese Java-Methode gibt den Wert der grünen Komponente für die Farbe zurück, die du erstellt hast. Alle Werte liegen in dem Bereich, der im RGB-Farbschema grün entspricht. Beispiel:

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

getRed()

Ähnlich wie getGreen() gibt getRed den Wert für die rote Komponente einer bestimmten Farbe zurück. Du hast bereits gesehen, wie die Methode im obigen Beispiel angewendet wurde.

getBlue()

Diese Methode gibt den Wert von Blau innerhalb des Wertebereichs des RGB-Farbschemas zurück. Für das Beispiel der Verwendung von getBlue() siehe auch die Beschreibung von getGreen().

getAlpha()

Die Methode getAlpha() wird in Java verwendet, wenn ein Entwickler den Alphawert einer bestimmten Farbe ermitteln möchte. Ähnlich wie bei RBG liegen die Alpha-Werte aller Farben im Bereich von 0-255. Beispiel: So wurde getAlpha() als Teil einer Schleife verwendet.

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

getTransparency()

Diese Methode gibt den Transparenzwert zurück, den du oder ein anderer Entwickler bei der Erstellung der Farbe angegeben hat. Beispiel:

public int getTransparency() {

return myColor.getTransparency();

boolean equals(Object obj)

Diese Methode ist sehr nützlich, wenn du zwei Farben miteinander vergleichst. Damit können Java-Entwickler feststellen, ob zwei Color-Objekte den gleichen Wert haben. Beispiel:

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)

Ähnlich wie bei boolean equals(Object obj) handelt es sich hier um eine vergleichende Methode. Wir verwenden sie, um festzustellen, ob Color-Objekte einander gleich sind. Beispiel:

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

Leitfaden für die wichtigsten in Java verwendeten Farben

Nachdem du nun die Methoden zur Manipulation von Farben in Java verstanden hast, wollen wir uns die Feldtypen ansehen, mit denen du arbeiten wirst. Dies sind die tatsächlichen statischen Farben, die Java-Entwickler definieren können. Du kannst eine Farbe entweder definieren, indem du ihren Namen eingibst (achte darauf, dass du ihn genau so eingibst, wie er in der offiziellen Dokumentation steht) oder indem du ihren RGB-Wert angibst. Werfen wir einen Blick auf die Palette, die Entwickler verwenden:
Feldname Beschreibung
static color black (BLACK) Definiert Schwarz
static color white (WHITE) Definiert Weiß
static color blue (BLUE) Wird verwendet, um Blau zu definieren
static color gray (GRAY) Definiert Grau
static color darkgray (DARK_GRAY) Definiert einen dunkleren Grauton
static color lightGray (LIGHT_GRAY) Definiert einen helleren Grauton
static color green (GREEN) Wird verwendet, um Grün zu definieren
static Color magenta (MAGENTA) Definiert Magenta
static Color pink (PINK) Definiert Rosa in Java
static Color orange (ORANGE) Erzeugt Orange in Java
static Color yellow (YELLOW) Wird verwendet, um Gelb zu definieren
static Color red (RED) Definiert Rot in Java

Übungsaufgaben zur Verwendung von AWT.Color in Java

Hast du das Gefühl, dass du eine solide Grundlage für AWT Color in Java hast? Testen wir diese Fähigkeiten, indem wir ein paar Übungsaufgaben lösen – hier musst du Konstruktoren und allgemeine Methoden sowie andere nicht farbbezogene Java-Tools anwenden. Übungsaufgabe #1. Erstelle eine benutzerdefinierte Komponente, mit der ein Programmbenutzer die RGB-Werte einer Farbe verändern kann (ähnlich wie RGBColorChooser). Achte darauf, dass du getColor() in deine Komponenten einbaust. Mach die Komponente zu einer Panel-Unterklasse, nicht zu einem Applet. Antwort: Das ist ein ziemlich komplexes Problem – lass es uns in überschaubare Schritte aufteilen:
  1. Wandle einen RGBChooser in eine Komponente um.
  2. Füge eine neue Routine zu der Komponente hinzu: getColor().
  3. Füge setColor() hinzu, um die Farbe zu setzen.
Hier ist der Beispielcode, den du am Ende des Tages erhalten solltest:

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

Fazit

Glückwunsch, du hast diesen umfangreichen Leitfaden zu AWT.Color in Java komplett durchgelesen. Jetzt wird der Umgang mit Interfaces viel einfacher sein. Vergiss nicht, dein Wissen durch das Lösen von Übungsaufgaben und CodeGym-Quizze anzuwenden. Übung macht den Meister, also gib bei den Beispielproblemen dein Bestes!
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION