Farben und Strings

Avalon

Grünschnabel
Hallo zusammen,

ich hab ein kleines Problem^^
Ich würde gerne dem Benutzer eines von mir und meiner Arbeitsgruppe erstellten Programms die Möglichkeit geben verschiedenen Texten verschiedene Farben zu geben - soweit ist das auch nicht das Problem.
Das, was nicht klappt ist - bei jedem Softwareneustart muss der User die Einstellungen erneut setzen - was tun wir also? Richtig, wir schreiben die Farben in eine .txt Datei rein.
Da stehen nun also die beiden Farben (Farbschema #1 ist in beiden Fällen schwarz) wie folgt in der Datei:
java.awt.Color[r=0,g=0,b=0] java.awt.Color[r=0,g=0,b=0]

Auslesen kann ich die auch schon, allerdings ja nur als String. Gibt es ab dieser Stelle (oder auch gerne vorher schon) nun Möglichkeiten einfach und schnell diese Strings wieder in Farben umzuwandeln?

Gruß,

Avalon
 
Wäre cool, wenn du das nochmal genauer erklären könntest oO
Evtl. hilft ja mein Code auch n wenig.

Ich hab einen MenüEintrag zum Testen, der nur die Auslese-Funktion in Gang bringen soll.

Code:
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        try {
            readColor("color.txt");
        }
        catch (FileNotFoundException fnfe) {
            JOptionPane.showMessageDialog(null, "Datei nicht gefunden", "Fehler", 1);
        }
        catch (IOException ioe) {
            JOptionPane.showMessageDialog(null, "Datei nicht gefunden", "Fehler", 1);
        }
    }

Dann kommt hier der Code der eigentlichen Auslese-Funktion. Der holt sich die Datei bisher, liest das als String ein und splittet den dann am Leerzeichen auf, sodass beide gespeicherten Farben einzeln als String verwendet werden könnten.

Code:
public void readColor(String fileName) throws FileNotFoundException, IOException {
        String privateC, publicC, colors[];
        try {
            BufferedReader colorReader = new BufferedReader(new FileReader(fileName));
            String temp = colorReader.readLine();
            colors = temp.split(" ");
            privateC = colors[0];
            publicC = colors[1];
            colorText(privateC, publicC);
        }
        catch (FileNotFoundException fnfe) {
            JOptionPane.showMessageDialog(null, "Datei nicht gefunden", "Fehler", 1);
        }
        catch (IOException ioe) {
            JOptionPane.showMessageDialog(null, "Datei nicht gefunden", "Fehler", 1);
        }
    }

Ich komm irgendwie nich wirklich weiter. Im Moment verstehe ich den ObjectInputStream noch nicht so ganz - könnte es damit aber sein, dass ich für jede der beiden Farbvarianten (private Color und public Color) damit am sinnvollsten eine eigene Datei anlegen sollte?

Falls die writeColor Funktion noch benötigt wird, bitte einfach sagen^^
 
Dann wäre hier writeColor.

Code:
private void writeColor(Color privateC, Color publicC) {
        //String privCol = privateC.toString()+"\n", pubCol = publicC.toString(); //Alternative zur unteren Zeile - keine Trennung durch Leerzeichen, sondern durch Zeilenumbruch
        String privCol = privateC.toString()+" ", pubCol = publicC.toString();

        try {
            FileOutputStream writeStream = new FileOutputStream("./././color.txt");
            for (int i=0; i < privCol.length(); i++) {
                writeStream.write((byte)privCol.charAt(i));
            }
        }
        catch (java.io.IOException e) {
        }

        try {
            FileOutputStream writeStream = new FileOutputStream("./././color.txt", true);
            for (int i=0; i < pubCol.length(); i++) {
                writeStream.write((byte)pubCol.charAt(i));
            }
        }
        catch (java.io.IOException e) {
        }
    }

writeColor wird von einem Button ausgeführt, der für ein jeweiliges Farbschema steht. (Sind bisher 5 verschiedene, tun aber alles exakt das Selbe, nur mit anderen Farben)

Code:
private void colorScheme1ActionPerformed(java.awt.event.ActionEvent evt) {                                             
        //Standardfarbschema
        //Privatfarbe: schwarz
        //Dienstfarbe: schwarz
        privateColor = new Color(0,0,0);
        publicColor = new Color(0,0,0);
        writeColor(privateColor, publicColor);
    }
 
Wir haben selbst dieses Semester erst Streams durch genommen, also habe ich ein kleines Beispielprogramm geschrieben
Java:
import java.awt.Color;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

class ColorStream {
	public static void main(String[] args) throws Exception {
		Color[] colors = new Color[] {Color.red, Color.green};

                //Farb-Array in Datei schreiben
		writeColors("datei.col", colors);

                //Auslesen
		Color[] anotherArray = readColors("datei.col");
	}
	
	private static void writeColors(String fileName, Color[] colors) throws Exception {
                ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName));

                out.writeObject(colors);

               out.close();
    }
    
    private static Color[] readColors(String fileName) throws Exception {
	    ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));

            Object o = in.readObject();

            in.close();

            if(o instanceof Color[])
            return (Color[])o;

           throw new Exception("Datei entählt kein Objekt vom Typ Color[]");
    }
}

Die wenigen Zeilen sollten selbsterklärend sein.
Mit den Exceptions habe ich es mir natürlich leicht gemacht. Das sollte man schöner machen.

Edit: Anstatt den Umweg über ein Array zu gehen, kannst du auch einfach beide Objekte nacheinander in die Datei schreiben (zweimal writeObject() nacheinander) und es entsprechend nacheinander wieder einlesen.
 
Zuletzt bearbeitet:
Soweit so gut (dein Code ist auch noch so viel kürzer als meiner das es mir weh tut xD"), aber eine Frage bleibt noch kurz ;-)

Kann man damit mehr als eine Farbe pro Datei auslesen? Es wäre sicherlich kein Problem einfach eine zweite Datei anzulegen, aber wenn möglich will ich das natürlich vermeiden *g*
 
Sofern das normal ist, dass dann total unleserliches Zeugs in der Datei als Plaintext steht, ist alles ok und deine Lösung toll xD
Das Problem is, ich kann nichmal alle Zeichen hier reinkopieren die da stehen, das Forum kennt die Zeichen nicht...


Edit:
Hm... also heute wird das nix mehr aber ... irgendwie krieg ich das nich wirklich zum Laufen ... unleserliches Zeug in der Datei (mag noch ok sein, weil ja ken String sondern n Object reingeschrieben wird), aber in deiner readColor wird die If- etc. total ignoriert.
Es wird weder die Exception geworfen, dass kein passendes Object in der Datei stünde, noch wird irgendwas returnt, geschweige denn, dass die Test-System.out die ich eingebaut habe ausgeführt wird.
 
Zuletzt bearbeitet:
Zurück