Como transformar Object em Color? [RESOLVIDO]

6 respostas
lary_nascimento

Bom, eu insiro a cor (java.awt.Color[r=0,g=0,b=0]) no banco como Object, mas o tipo do campo é nvarchar, não sei se isso muda alguma coisa.
Estou tentando transformar a cor que está no banco em Color.
Já tentei passar de String pra Color e também não funcionou.
Estou fazendo desse jeito:

coratual = (Color)(Valor("cor")); btnCor.setBackground(coratual);

Agradeço a ajuda!

6 Respostas

E

Primeira coisa - quando você pegou esse Color e o jogou diretamente no banco, com casca e tudo, converteu o objeto para uma String ‘(java.awt.Color[r=0,g=0,b=0])’, e isso é que ficou guardado no banco, de forma extremamente ineficiente.
Se você não se importa com isso, terá de criar um método que pegue essa string e a converta para um Color, o que requer um pouco de esforço.
O mais simples seria você criar quatro campos (red, green, blue, alpha) que são numéricos, com 3 dígitos cada, e você obter os valores com getRed(), getGreen(), getBlue() e getAlpha(), salvando-os no banco. Para recuperá-los do banco, leia esses 4 campos, e converta-os com o construtor de Color que recebe 4 parâmetros:

http://docs.oracle.com/javase/6/docs/api/java/awt/Color.html#Color(int,%20int,%20int,%20int)

V

Como recuperar depende muito de como você coloca no banco, quando vc coloca a instancia de um objeto no banco se não houver nenhum tipo de conversão, o objeto irá como String, esperimente fazer isso

public class NovoTeste { public static void main(String[] args) { System.out.println(new NovoTeste()); } }

Você observará que o que irá ser imprimido não tem nenhuma informação sobre as propriedades do objeto, isso fará com que haja perda da informação no processo, o mais aconselhável a fazer é ao invés de ter um campo no banco de dados chamado “Cor”, crie 4 campo, cada uma para cada especto da cor (Vermelho, Azul e Verde), alem do Alpha que é o grau de transparência. fazendo isso basta fazer o processo oposto para recuperar.

Essa não é a única forma, só é a mais fácil, você pode também transformar a cor em hex, que não é dificil, isso seria bom porque em hex você poderia usar só um campo no banco ao invez de 4.

Você pode também usar o metodo getRGB() que retornará um integer que representa a cor atual e armazenar esse numero no banco de dados assim

public class NovoTeste {
    public static void main(String[] args)  {
        //Cria uma cor
        Color color = new Color(125, 50, 63);
        //pega a cor anterior e cria outr identica
        Color color2 = new Color(color.getRGB());
        //imprime o valor RGB da cor
        System.out.println(color.getRGB());
    }
}

Então na hora de você pegar do banco de dados basta você fazer assim :

//lembrando que para isso der certo você tem que ter armazenado no banco o RGB não o que você tem atualmente
Color color = new Color(Valor("cor"));

ou seja se você para pode achar várias maneiras de armazenar, mas o importante é achar um que você possa depois recuperar.

lary_nascimento

Tentarei das duas maneiras e posto aqui o resultado.
Obrigada ao dois. :smiley:

lary_nascimento

Bom, to apanhando aqui ainda. :confused:
Me parece que não dá pra fazer com getRGB() por que não dá pra converter inteiro em Color.

Para armazenar 4 campos com as cores vermelho, azul, verde e alpha, parece ser mais fácil, a questão é… onde eu coloco o valor de Alpha no Color? :

java.awt.Color[r=255,g=0,b=0]
V

so vou reforça um pouco o que eu disse, para recuperar depende de como você guardou, tente limpar o banco de dados, primeiro, faça uma nova inserção, mas antes de fazer a inserção, use o método getRGB e insira no banco esse valor.

A String que você está pegando

java.awt.Color[r=255,g=0,b=0]

não será válido para fazer o que eu disse por que a forma que você armazenou no banco de dados é que ta errado

se você não conseguir, poste aqui seu código quando você faz a inserção e quando você faz a pesquisa da cor, ou o código todo se for pequeno, assim vou poder te ajudar melhor

lary_nascimento

Bom pessoal, consegui fazer e ficou super legal; :smiley:
Juntei a ajuda de vocês e deu certo!
Eu deixei apenas a paleta Amostras pra ficar mais fácil pro usuário, no caso do meu programa. Custei pra achar isso também, mas deu certo
Vou postar todo o código do botão que abre o JColorChooser para poder ajudar mais alguém…

private void btnCorActionPerformed(java.awt.event.ActionEvent evt) {

final JColorChooser colorChooser = new JColorChooser();

    //guardo na Color coratual a cor que estava no botão antes da pessoa escolher uma nova cor
    final Color coratual = btnCor.getBackground();

    //personalizando a visualização da cor na label
        labelcor = new JLabel("Selecione a Cor", labelcor.CENTER);

    labelcor.setFont(new Font("Century Gothic", Font.BOLD, 80));
    //aqui eu seto a minha labelcor para ser o Preview do JColorChooser
    colorChooser.setPreviewPanel(labelcor);

    //tirando as paletas HSL,HSV, RGB e CMYK do JColorChooser()
    AbstractColorChooserPanel[] panels = colorChooser.getChooserPanels();
    for (AbstractColorChooserPanel accp : panels) {
        if (accp.getDisplayName().equals("HSL")) {
            colorChooser.removeChooserPanel(accp);

        } else if (accp.getDisplayName().equals("HSV")) {
            colorChooser.removeChooserPanel(accp);

        } else if (accp.getDisplayName().equals("RGB")) {
            colorChooser.removeChooserPanel(accp);

        } else if (accp.getDisplayName().equals("CMYK")) {
            colorChooser.removeChooserPanel(accp);

        }

    }

   //Listener para alterar a cor da label de visualização quando o usuário mudar de cor na paleta
    ColorSelectionModel colormodel = colorChooser.getSelectionModel();
    ChangeListener escutamudancas = new ChangeListener() {

        @Override
        public void stateChanged(ChangeEvent e) {
            Color novacor = colorChooser.getColor();
            labelcor.setForeground(novacor);
        }
    };
    colormodel.addChangeListener(escutamudancas);

    //listener para quando a pessoa clicar no botão OK  
   //aqui que estava uma das minhas dificuldades nesse tópico
    ActionListener okActionListener = new ActionListener() {

        public void actionPerformed(ActionEvent actionEvent) {
            System.out.println("OK Button");

//atribuo as 3 cores para 3  variáveis (inteiro)
           corVermelho = colorChooser.getColor().getRed();
           corVerde = colorChooser.getColor().getGreen();
           corAzul = colorChooser.getColor().getBlue();

           Color co = new Color(corVermelho,corVerde,corAzul);

//seto a cor que a pessoa escolheu no background do botão Cor
           btnCor.setBackground(co);
           }
    };

//caso a pessoa aperte o cancelar, a cor do botão volta para a cor que estava antes (coratual)
    ActionListener cancelActionListener = new ActionListener() {

        public void actionPerformed(ActionEvent actionEvent) {
            System.out.println("Cancel Button");
            
            btnCor.setBackground(coratual);

            }
    };


    //quando o usuário abrir o JColorChooser, a cor selecionada será a que já está no botão, em seguida, abre o ColorChooser
    colorChooser.setColor(coratual);
    dialog = colorChooser.createDialog(btnCor, "Selecione a Cor do Veículo", true, colorChooser, okActionListener, cancelActionListener); 
    dialog.setVisible(true);
}

Pegando do banco e colocando no botão Cor

Color co = new Color((Integer)Valor("corRed"),(Integer)Valor("corGreen"),(Integer)Valor("corBlue")); btnCor.setBackground(co);

Aqui é na hora de guardar no banco, que foi a minha outra dificuldade, e ficou bem simples:

dados.put("corRed", corVermelho);
        dados.put("corGreen", corVerde);
        dados.put("corBlue", corAzul);

Prontinho, é isso.
MUITO OBRIGADA pra vocês que me ajudaram!
E espero poder ajudar outros com essas informações. :slight_smile:

Criado 26 de junho de 2013
Ultima resposta 27 de jun. de 2013
Respostas 6
Participantes 3