Galera…
Como faço isso?
:hunf:
tenho a seguinte string:
"java.awt.Color[r=153,g=255,b=255]"
Galera…
Como faço isso?
:hunf:
tenho a seguinte string:
"java.awt.Color[r=153,g=255,b=255]"
Já Tentei com casting, mas não dá 
Isto para mim quer dizer:
Cast não faz milagres nem magia - ele é só uma reinterpretação, não uma conversão mágica. E em Java nem dá para criar um “cast” especial para sua classe - isso é possível em C++ mas não em Java.
No seu caso, você vai ter de criar um java.awt.Color passando os parâmetros para o construtor. E você vai ter de converter manualmente os pedaços numéricos da string para os valores numéricos. Ou seja, escreva um método que receba uma String, efetue as conversões numéricas, e retorne um objeto java.awt.Color.
Não sei se ajuda mas existe o StringBuilder tb não sei
com usa.
Não ajudei muito mas ta i
Apesar do Thingol ter ajudado de forma meio estúpida (risos), eu agradeço todos os comentários, e adianto que consegui resolver o problema (baseando-se na idéia do thingol):
Seguinte:
Temos um objeto JColorChooser com o nome de JCcor
Atribuimos a uma variável string, o valor da sua cor atual no formato RGB (getRGB), junto a um conjunto de aspas duplas para fazer a conversão Int to Str:
String cor = ""+JCcor.getColor().getRGB();
(pq string? não sei! Pode ser int também… depende de como você vai gravar no banco de dados)
E finalmente, utilizamos o método setColor para re-definir a cor do JCcor:
JCcor.setColor(Integer.parseInt(cor));
Abração galera!
Vc tem esta string: “java.awt.Color[r=153,g=255,b=255]”
Bom, vc tem este construtor do Color:
http://tns-www.lcs.mit.edu/manuals/java-api-old/java.awt.Color.html#Color(int,%20int,%20int)
agora tem que ‘parsear’ esta string atras do r, g e b 
Uma forma muito sacana seria usando expressões regulares:
remove tudo o que não for numeros e virgula por Nada, acho que seria esta regex: “[^0-9,]”
uma vez que vc fez isso, terias algo como 153,255,255 – seria o caso de fazer um split em torno da virgula e terias um array de 3 posições, e cada uma pode ser convertida em um inteiro usando um Integer.parseInt
isso se as posições do r g e b forem fixas, caso contrario terias q usar outra extratégia mas que ainda assim seria uma analise da string 
Fala parceiro, tudo bom? Felizmente ja resolvi meu problema. Mas tua i déia era convencional a minha antiga idéia, porém… era o plano “b”. Como ja resolvi como ja foi postado logo acima, fica meu agradecimento…
O que você pode tentar fazer pra implementar a dica do Thingol é utilizar uma expressão regular pra extrair os valores numéricos do resultado do toString de um objeto Color.
Uma solução bem simples e tosca, e outra um pouco mais sofisticada seriam as seguintes:
class TEMPO{
public static void main(String[] args) {
Color c1 = Color.ORANGE;
Color c2 = shabbyFromString(c1.toString());
Color c3 = fancyFromString(c2.toString());
System.out.println("c1: " + c1);
System.out.println("c2: " + c2);
System.out.println("c3: " + c3);
System.out.println("c1.equals(c2): " + c1.equals(c2));
System.out.println("c1.equals(c3): " + c1.equals(c3));
System.out.println("c2.equals(c3): " + c2.equals(c3));
}
public static Color shabbyFromString(String colorString) {
/*
* Algumas constantes interessantes... Utilizadas para indexar o
* vetor que armazenará os valores obtidos de colorString
*/
final int
/*
* RED começa com o valor 1 porque 0, no vetor, vai ter um String
* vazio. Estude mais o método split da classe String para entender
* isso melhor...
*/
RED = 1,
GREEN = 2,
BLUE = 3
;
/*
* Troca no String tudo que não for número por espaço
*/
colorString = colorString.replaceAll("\D", " ");
/*
* Troca no String todos espaços replicados por um único espaço
*/
colorString = colorString.replaceAll(" {2,}", " ");
/*
* Quebra o String a cada espaço encontrado, criando assim um vetor
* de objetos String
*/
String[] colorValues = colorString.split(" ");
/*
* Cria um objeto Color utilizando os valores armazenados nas posições
* do vetor colorValues
*/
Color result = new Color(
Integer.parseInt(colorValues[RED]),
Integer.parseInt(colorValues[GREEN]),
Integer.parseInt(colorValues[BLUE])
);
/*
* Retorna a cor sintetizada
*/
return result;
}
public static Color fancyFromString(String colorString) {
/*
* Cria um padrão de expressão regular - regex - para identificar apenas
* strings com 1 ou mais caracteres numéricos
*/
Pattern padrao = Pattern.compile("\d+");
/*
* Cria um casador(argh!!!) que utiliza o padrão de regex criado
* anteriormente para fazer buscas em um determinado objeto
* CharSequence (String é filha de CharSequence), que no nosso caso é
* o String que queremos converter pra Color
*/
Matcher casador = padrao.matcher(colorString);
/*
* Cria um vetor de inteiros com três posições, uma para cada componente
* de cor
*/
int[] rgb = new int[3];
/*
* Constantes para indexar o vetor rgb
*/
final int
RED = 0,
GREEN = 1,
BLUE = 2
;
for(int c = 0; c < rgb.length; c++) {
/*
* Busca dentro de colorString algum trecho que "case" com a regex
* definida pelo Pattern padrao. Retorna true ou false.
* Chamadas subsequentes do método find, fará com que o casador
* continue buscando por um novo trecho que case com a regex, só que
* começando do fim do trecho encontrado anteriormente.
*/
if(casador.find()) {
int
/*
* O método start de Matcher retornará um inteiro indicando
* a posição, dentro de colorString, do primeiro caractere do
* trecho que casa com nossa regex.
*
*/
inicioValor = casador.start(),
/*
* O método end de Matcher retornará um inteiro indicando,
* dentro de colorString, a posição seguinte ao último
* caractere do trecho que casa com nossa regex
*/
fimValor = casador.end()
;
/*
* Extraímos o valor do String, convertemos-o em inteiro e
* armazenamos-o no vetor rgb
*/
rgb[c] = Integer.parseInt(
colorString.substring(inicioValor, fimValor)
);
}
}
/*
* Retornamos o objeto Color representado pelo string colorString
*/
return new Color(rgb[RED], rgb[GREEN], rgb[BLUE]);
}
}
Mantu, invés de substring, não seria melhor usar “casador.group();”?
Eu ia postar essa mesma solução usando regex, mas então vi que o peerless, já tinha encontrado uma =]
Até
Verdade! bem melhor! Mas aí a regex teria que ser mudada para “(\d+)”, né? Também aquele lance de inicioValor e fimValor também iria pro saco…
Quando eu comecei a escrever o post, ninguém tinha respondido ainda… sou meio lerdo pra digitar, hehehe
A propósito: “casador” é de doer, né não? :lol:
não não, a regex poderia continuar “\d+”
Pattern p = Pattern.compile("\d+");
Matcher m = p.matcher("java.awt.Color[r=153,g=255,b=255]");
while (m.find()){
System.out.println(m.group());
}
e já funcionaria certinho!
e casador dói mesmo huahuuu