Exercício 6.1 Livro Java Como Programar

7 respostas
K

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:
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;
		}
	}
}
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 );
	}
}

Alguém poderia me ajudar?

Desde já agradeço.

7 Respostas

T

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

L

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);

K

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 :D . 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:

int verm = 12;
int verd = 12;
int azul = 12;

Color cor = new Color ( verm, verd, azul );

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

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

Exemplo:
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;
}

Existe algum modo de fazer isso?

Obrigado novamente :D

K

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

L

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

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

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).

K

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

B

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("serial")
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
Criado 2 de fevereiro de 2012
Ultima resposta 22 de nov. de 2012
Respostas 7
Participantes 4