Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Come ottenere un oggetto Color da una stringa che identifica il colore???

    Ciao a tutti,
    come da oggetto sto cercando un metodo che permetta di ottenere un oggetto istanza di classe Color corrispondente ad un certo colore specificato in una variabile stringa.


    Esempio:
    String myColor = "red";
    Color colore = ottieni_corrispondente_colore(myColor);


    Ho provato con il metodo static getColor della classe Color, ma il return è sempre un null:


    myColor = java.awt.Color.getColor("red");
    System.out.println("Trovato il colore " + myColor);


    Grazie in anticipo per l'aiuto,
    Sonoftheland

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Come ottenere un oggetto Color da una stringa che identifica il colore???

    Originariamente inviato da sonoftheland
    Ciao a tutti,
    come da oggetto sto cercando un metodo che permetta di ottenere un oggetto istanza di classe Color corrispondente ad un certo colore specificato in una variabile stringa.

    Ho provato con il metodo static getColor della classe Color, ma il return è sempre un null:

    myColor = java.awt.Color.getColor("red");
    System.out.println("Trovato il colore " + myColor);
    No, quel getColor() usa una system property e il valore deve essere un intero.

    Purtroppo in java.awt.Color non c'è alcun metodo per "parsare" un String che contenga un nome di un colore es. "red" o "green".
    La soluzione più veloce: crearsi una mappa (HashMap) che contiene i nomi come chiavi e i colori come valori.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,325
    Non c'è nulla di "prefabbricato".
    Il metodo statico getColor(String nm) fa una cosa diversa: controlla se esiste una System Property con quel nome a cui poi viene associato il colore relativo (come descritto nella documentazione).

    Se vuoi ottenere una corrispondenza tra una stringa ed un colore, l'unica cosa è creare una Map e poi usarla. Ad esempio:

    codice:
    HashMap colori = new HashMap();
    colori.add("ROSSO", Color.RED);
    colori.add("VERDE", Color.GREEN);
    colori.add("BLU", Color.BLUE);
    ...
    Quindi, successivamente, otterrai il colore in questo modo:

    codice:
    String myColor = "red"; 
    Color c = (Color) colori.get( myColor.toUpperCase() );
    Ovviamente dovrai mappare a mano tutti i colori che pensi potranno essere richiesti. Ti consiglio di mapparli con il nome in maiuscolo (o minuscolo, basta che sia coerente) e, successivamente, convertire la richiesta tutta in maiuscolo (o minuscolo) per evitare problemi.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Ho sperimentato un'altra soluzione, alternativa a quella
    del mappaggio che sembrava anche a me comoda perchè "hard-wired", per così dire.

    La soluzione funziona ed è la seguente:

    String colore = "BLUE";
    Class c = Class.forName("java.awt.Color");
    Field campo;
    campo = c.getDeclaredField(colore);
    Color myColor = (Color)f.get(null);

    Ovvero quella di passare attraverso un campo corrispondente al colore impostato.
    Credo che il metodo getDeclaredField non faccia altro che il mapping di cui si parlava.

    Grazie a tutti

  5. #5
    Diciamo che a farlo con la reflection non e' che ottieni il codice piu' performante del mondo, soprattutto se si tratta di codice che viene chiamato spesso. E non lo vedo nemmeno come un modo molto pulito.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mxa
    Diciamo che a farlo con la reflection non e' che ottieni il codice piu' performante del mondo, soprattutto se si tratta di codice che viene chiamato spesso. E non lo vedo nemmeno come un modo molto pulito.
    Concordo in pieno. E oltretutto bisogna tener presente che usando la reflection c'è da gestire le eccezioni ... la prima e più ovvia, se il nome non è di un campo, salta fuori NoSuchFieldException. E inoltre ... in Color non è che ci sia poi così tanta "scelta" di colori tra le costanti!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.