Exercício 6.1 Livro Java Como Programar

Bom dia.

Olha eu aqui de novo com uma pequena dúvida:

Exercício 6.1: Utilizando o método fillOval, desenhe um alvo que alterna entre duas cores aleatórias, a fim de que desenhe um alvo na tela. Utilize o construtor Color( int r, int g, int b) com argumentos aleatórios para gerar cores aleatórias.

Bom, meu problema é que eu não entendi como que posso usar esse construtor no código. Eu não entendi como que usa ele.

Meu código (usando setColor), ficou assim:

[code]import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class Alvo extends JPanel
{
private static final long serialVersionUID = 7860109602327315004L;

public void paintComponent( Graphics g )
{
	super.paintComponent( g );
	int altura = getHeight();
	int largura = getWidth();
	int altura2 = altura - altura / 15;
	int largura2 = largura - largura / 15;
	int altura3 = altura / 30;
	int largura3 = largura / 30;
	
	for ( int i = 1 ; i <= 5 ; i++)
	{
		if ( i % 2 == 0 )
			g.setColor(Color.YELLOW);
		else
			g.setColor(Color.BLUE);
		
		g.fillOval(largura3, altura3, largura2, altura2);
		
		altura2 -= altura / 5;
		largura2 -= largura / 5;
		
		altura3 += altura / 10;
		largura3 += largura / 10;
	}
}

}[/code]

[code]import javax.swing.JFrame;

public class AlvoTeste
{
public static void main( String args[] )
{
Alvo painel = new Alvo();
JFrame aplicativo = new JFrame();

	aplicativo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	aplicativo.add( painel );
	aplicativo.setSize( 230, 250 );
	aplicativo.setVisible( true );
}

}[/code]

Alguém poderia me ajudar?

Desde já agradeço.

Pelo que entendi, o que ele pede, é que voce gera cores aleatorias no padrao rgb, muito usado em , por exemplo, css, onde r = red, g = green, b = blue, e os valores inteiros, é quanto de cada cor terá para fazer essa nova cor, esse LINK, tem muitas cores que voce pode fazer usando esse padrao; Agora, não sei muito de Awt, mas acredito que Cor deve ser uma classe que use algo disso, e nao uma ENUM

A Classe Color possui algumas constantes com cores pre-definidas, mas caso deseje uma cor personalizada vc pode instanciá-la informando os valores RGB.

int red = 127; int green = 127; int blue = 127; Color c = new Color(red, green, blue); // Vai ser cinza a cor, todos 127 = #7F7F7F em HTML g.setColor(c);

Obrigado pelas rápidas respostas.

@lsjunior:

Cheguei a fazer isso que você escreveu, mas o problema é que, se eu atualizo os valores de r,g e b, as cores não mudam…

Quando você instancia um objeto da classe Color com valores pré-determinados, o objeto mantém esses valores.

Pensei que eu estava fazendo errado quando criei um objeto da classe, mas estava certo :smiley: . O meu problema está sendo tentar tornar os valores desse objeto alteráveis, entendeu?

Vamos dizer que eu crio um objeto chamado cor da classe Color conforme o seguinte código:

[code]int verm = 12;
int verd = 12;
int azul = 12;

Color cor = new Color ( verm, verd, azul );[/code]

Agora, se eu quiser mudar os parâmetros desse objeto, existe como?

Tentei mudar colocando no meu loop [i]for[/i] alguns cálculos nas variáveis de cor, mas não surtiu efeito.

Exemplo:

[code]for ( i = 1 ; i <= 5 ; i++)
{
g.setColor(cor);

g.fillOval(largura3, altura3, largura2, altura2);

altura2 -= altura / 5;
largura2 -= largura / 5;

altura3 += altura / 10;
largura3 += largura / 10;

verm *= 5;
verd *= 8;
azul *= 3;
}[/code]

Existe algum modo de fazer isso?

Obrigado novamente :smiley:

Só upando o tópico pra não ficar esquecido =D

Vc não entendeu bem. Os valores da cores vão de 0 a 255, vc cria as cores assim:

[code]new Color(0, 0, 0); // Será preto
new Color(255, 255, 255); Será branco, lembre-se que branco é a junção das cores e preto a ausência de cor

new Color(127, 127, 127); Cinza, mesmo valor para cor é sempre cinza, para um cinza mais claro basta colocar um valor maior e escuro valor menor
new Color(255, 0, 0); Vermelho bem vivo
new Color(127, 0, 0); Vermelho um pouco escuro
new Color(0, 255, 0); Verde bem vivo
new Color(0, 127, 0); Verde um pouco escuro
new Color(0, 0, 255); Azul bem vivo
new Color(0, 0, 127; Azul um pouco escuro
new Color(255, 255,0); Amarelo bem vivo
new Color(127, 127, 0); amarelo um pouco escuro[/code]

Para mais informações sobre os valore das cores vc pode usar um editor de imagem ou pegar p valor de uma cor em HTML(hexadecimal) e converter para RGB usando a calculadora do Windows Mesmo(#FFFF00 = Red FF, Green FF e Blue 00, que em decimal fica 255, 255, 0).

Desculpe a demora para responder.

Depois do penultimo post que fui entender que cada objeto criado da classe Color é uma cor diferente que não pode ser alterada posteriormente. Pra conseguir outra cor tem que criar outro objeto da classe Color.

De qualquer forma muito obrigado pela ajuda =D

Visando ajudar a galera que procurar o tópico e também se alguém deste ainda tiver alguma dúvida, porém acho difícil devido ao tempo, segue aí:

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
@SuppressWarnings(&quot;serial&quot;)
public class Alvo extends JPanel {
	int red = 102;  
	int green = 2;  
	int blue = 60;
	int red2 = 193;  
	int green2 = 160;  
	int blue2 = 4;
	Color cor = new Color(red, green, blue);
	Color cor2 = new Color(red2, green2, blue2);
	public void paintComponent( Graphics g ){
		super.paintComponent( g );
		int x = 10;
		int y = 200;
		for ( int i = 1; i &lt; 6; i++ ){
		if ( i % 2 == 0 )
			g.setColor(cor);
		else
			g.setColor(cor2);
		g.fillOval(x, x, y, y);
		x = x + 20;
		y = y - 40;
		}// fim do for				
	}// fim do método
}// fim da classe
import javax.swing.JFrame;
public class TestaAlvo3 {
	public static void main(String[] args) {
		Alvo panel = new Alvo();
		JFrame application = new JFrame();
		application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		application.add( panel );
		application.setSize(230, 250);
		application.setVisible( true );
	}// fim do main
}// fim da classe