2012-03-31 29 views
0

Ich arbeite mit einer Bibliothek, die Farbe verwendet, aber ich brauche die Funktionalität von Farbe. Gibt es irgendetwas, was ich tun kann, um irgendwie zu "casten" oder so etwas, so dass ich in der Lage sein werde, die Methoden von Color zu verwenden?Ändern der Farbe zu Farbe in Java

--EDIT--

Farbe ist jxl.format.Colour; Farbe ist ein java.awt.Color

Farbe ist eine interne Bibliothek Klasse, die eingeschränkte Funktionalität bietet. Ich möchte etwas fortgeschrittenere Operationen durchführen. Zum Beispiel:

  • Mit Farbe kann ich nur eine bestimmte Farbe zuweisen: Colour bgcol = Colour.BLUE;

  • Die Farbe givea mir mehr Optionen: brighter() und darker() Methoden, und so weiter.

Meine Bibliothek zwingt mich Farbe zu verwenden, zum Beispiel: die Methode setBackground(Colour) für die Argumente nicht anwendbar ist (Farbe).

+0

und was ist 'Colour'? –

+1

Ow ... mein Gehirn. Ich denke du musst mehr erklären. – Jivings

+0

Es ist eine Aufzählungsklasse, die die verschiedenen Farben enthält, die in der Standard-Excel-Farbpalette verfügbar sind. – Hurdler

Antwort

2

Von dem, was ich verstehe, Sie versuchen, alle Darstellungen des Namens Colour zu zu übertragen. Sie haben nicht angegeben, ob ein Suchen und Ersetzen für Ihre Bibliotheksdateien am besten geeignet ist. Nehmen wir an, Sie versuchen, eine generische Schnittstelle für diese Korrektur zu definieren. Noch haben Sie eine andere Notwendigkeit in Ihrem Code angegeben, abgesehen von dem Wunsch, diese beiden zusammen zu kleben. Möchten Sie sich in eine Klasse des anderen einordnen, um eine gewisse Bibliotheks- oder Codeabhängigkeit zu erfüllen, die Sie vielleicht haben? Es ist schwer zu sagen.

Da classes aren't first-class objects in Java, können wir dies tun, indem Sie eine Reihe von Schnittstellen oder Unterklassen für jede Instanz von Colour, die Sie mit ersetzen möchten. Oder konnten wir einige verrückte Dinge tun mit Java reflection.

Diese sind natürlich zu einem code smell etablierten hackt Sie ausgedrückt haben: versuchen, die Schnittstellennamen für jede Ihrer Klassen iterativ zu reparieren ist viel schwieriger als Definieren einer IDE-Regel oder Änderung in Ihrem vorhandenen Code für die Schnittstelle mit jeder Klasse mit dem Namen Colour. Daher würde ich letzteres tatsächlich empfehlen, um das Problem zu umgehen, indem Java-Sprachfunktionen über den beabsichtigten Umfang hinaus missbraucht werden.

Bearbeiten: Mit mehr Informationen aus dem OP, ist dies ein Wunsch für interface-stapling. Ich überlasse den Rest anderen Antworten.

4

Zuerst - geben Sie an, wonach Sie eigentlich fragen. Wir können schätzen, dass Ihr Colour ein jxl.format.Colour ist und Ihr Color ein java.awt.Color ist, aber es ist eine Vermutung.

Wenn das korrekt ist, hat die Color Enum eine getRGB() Methode, die die roten, grünen und blauen Komponenten der Farbe zurückgibt (ich bin Engländer, ich buchstabiere Farbe auf diese Weise natürlich). Die Klasse java.awt.Color verfügt über einen Konstruktor, der diese Komponenten akzeptiert.

können Sie also tun:

public static Color convert(Colour col) { 
    return new Color(
     col.getDefaultRGB().getRed(), 
     col.getDefaultRGB().getGreen(), 
     col.getDefaultRGB().getBlue()); 
} 

neue Color Instanzen die ganze Zeit mit der Erstellung zu speichern, müssen Sie die Übersetzungen in einem EnumMap speichern könnte.

+0

Ja, das ist, was ich suche. 'Col.getRGB()' gibt jedoch 'Die Methode getRGB() ist für den Typ Colour' nicht definiert. Außerdem könnte ich die RGB-Werte explizit angeben, wenn das einfacher wäre. – Hurdler

+0

+1 für psychische, Google-vermittelte Debugging vor dem OP erwähnt diese speziell. Guter Fang! :) – MrGomez

+0

@Hurdler: Entschuldigung - Ich war zwischen Google-Ergebnissen zippen und den genauen Namen der API vergessen. –