Farben als Enum

Carcharoth

Bekanntes Mitglied
Hallo

Ich habe ein Programm welches nacheinander diverse grafische Sachen zeichnet und ich möchte, dass es jedes Mal die Farbe wechselt.
Dazu habe ich mir ein Enum gemacht.

Java:
public enum Farben {
    RED, YELLOW, BLUE, BLACK, VIOLET, CYAN, GREEN, ORANGE, PINK, WHITE, MAGENTA, DARK_GRAY, LIGHT_GRAY, GRAY;
}

Wie kann ich dem Enum sagen, dass das alles Colors sind ? Damit ich danach sowas schreiben kann wie:
Java:
g2d.setColor(Farben.values()[i]);

Danke und Gruss
 
Du könntest dem Enum einen Konstruktor mit einem `java.awt.Color` Parameter geben und eine Instanzvariable, die du im Konstruktor setzt, und die einzelnen Literale dann mit ihren jeweiligen `java.awt.Color` Instanzen erzeugen:
Java:
import java.awt.Color;
public enum Farben {
  RED(Color.RED),
  YELLOW(Color.YELLOW),
  ...;

  public final Color awtColor;
  
  private Farben(Color awtColor) {
    this.awtColor = awtColor;
  }
}
und dann:
Java:
g2d.setColor(Farben.values()[i].awtColor);
 
Also erst einmal gibt es doch schon die Klasse Color mit entsprechenden Konstanten:

Und wenn Du da lediglich über ein Array zugreifen können willst, dann kannst Du ein entsprechendes Array aus den Konstanten da bauen. Sollte eine Farbe fehlen, kannst Du die mit dem new ja jederzeit erzeugen...

Ansonsten kannst Du prinzipiell in einer Enum auch weitere Dinge speichern. Also etwas wie:

Java:
public enum Farben {
    RED(Color.RED);
    
    private Color color;
    public Color getColor() { return color; }
    
    Farben(Color color) { this.color = color; }
}
(Einfach mal so für Rot geschrieben ohne es zu probieren ...)

Der Zugriff über den Index ist aber auch etwas dubios muss ich sagen. Denn der ist ja nicht fest Vorgegeben. Wenn Du das enum etwas veränderst, dann stimmt hinterher der Zugriff nicht mehr. Also ein einfaches Code Refactoring, das die Elemente z.B. sortiert, macht dann ggf Probleme. Aber wenn das vorher ausgewählt wird, dann mag es gehen... Aber selbst da: Der Nutzer wählt Farbe 8 und beim nächsten Update ist an Platz 8 eine andere Farbe?

Aber wenn Du Dir das schon so überlegt hast, dann ist es ok, aber ohne dein Usecase zu kennen, habe ich da leichte Bedenken.
 
Danke für die Tipps. Ich werde:
1) mein konkretes Problem mit einem Array von Konstanten aus der Klasse Color lösen.
2) etwas mehr mit Enum rumexperimentieren.

Gruss
 

Neue Themen


Zurück
Oben