Ajuda em exercício 4.1 do Livro deitel 6ª edição

Boa tarde a todos!
Poderiam me ajudar neste exercício? A primeira parte eu consegui fazer, mais a segunda parte não estou conseguindo. Vou postar o código que fiz.

[code]/*a) Crie o projeto na captura de tela esquerda da Figura 4.21.Esse projeto desenha

  • linhas a partir do canto superior esquerdo, estendendo as linhas ate que elas cubram
  • a metade superior esquerda do painel.Uma abordagern e dividir a largura e a altura em
  • um numero igual de passos (descobrimos que 15 passos funcionam bem).A primeira
  • extremidade de uma linha sempre estara no canto superior esquerdo(0, 0). A segunda
  • extremidade pode ser encontrada iniciando no canto inferior esquerdo e movendo-se para
  • cima um passo vertical e para a direita um passo horizontal. Desenhe uma linba entre as
  • duas extremidades.Continue movendo-se para cima e para a direita para encontrar cada
  • extremidade sucessiva.A figura deve ser dimensionada de maneira correspondente a medida
  • que voce redimensiona a janela.
    b) Modifique sua resposta na parte(a) para que as linhas se estendam a partir de todos
    os quatro cantos,como mostrado na captura de tela direita da Figura 4.21. As linhas nos
    cantos opostos devem interseccionar no meio.*/
    import java.awt.Graphics;

import javax.swing.JPanel;

@SuppressWarnings(“serial”)
public class DrawPanel extends JPanel {

public void paint(Graphics g) {

	super.paint(g);

	int largura = getWidth();
	int altura = getHeight();
	int contador = 1;
	int passos = 0;

	while (altura - passos >= 0) {

		g.drawLine(0, 0, passos, altura - passos);
		passos = passos + 15;
		contador++;

	}

}

}
import javax.swing.JFrame;

public class TestaDrawPanel {

public static void main(String[] args) {

	DrawPanel painel = new DrawPanel();

	JFrame aplicacao = new JFrame();

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

}[/code]

a parte b) que não consigo de jeito nenhum, acho que não peguei bem o conceito da coisa toda. Obrigado a todos

Cara, em cima desse seu código, eu montei o restante do exercício. Veja

public class DrawPanelA extends JPanel{
	
	private static final long serialVersionUID = 1L;

	public void paintComponent( Graphics g ){
		
		super.paintComponent( g );
		
		int width = getWidth();
		int height = getHeight();
		int passos = 0;
		
		
		while( height - passos >= 0){
			
			//canto superior esquerdo
			g.drawLine(0, 0, passos, height - passos);
			
			//canto inferior direito
			g.drawLine(width, height, passos, height - passos);
			
			//canto superior direito
			g.drawLine(width, 0, passos, passos);
			
		    //canto inferior esquerdo
			g.drawLine(0, height, passos, passos);
			
			passos = passos + 15;
						
		}
		
	}
	
}

Classe de teste…


import javax.swing.JFrame;

public class DrawPanelATest {
	
	public static void main(String[] args) {
			
	DrawPanelA panel = new DrawPanelA();
	
	JFrame application = new JFrame();
	
	application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	
	application.add( panel );
	application.setSize( 250, 250 );
	application.setVisible( true );
	
	}
	
}

Valeu amigo, só hoje que vi! Tinha até pulado esse exercício, vou usar seu código e ver como fica…Obrigado

Note os detalhes.

  1. Jamais sobrescreva o método paint de qualquer filho de JComponent (JPanel, JLabel, etc…). No lugar, você sobrescreve o método paintComponent;
  2. Jamais altere o estado do objeto Graphics recebido por parâmetro, o ideal é fazer uma cópia de segurança, e descarta-la ao final do método:

@Override public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); //Cópia //Use g2d para desenhar g2d.dispose(); }

Vini…entendi nada rsrs…ainda sou novato em java, por favor, seja mais detalhista.

Abraço

Gilvani…

Achei esse aqui procurando na net…só não me lembro onde rs…acho q tem mais a ver com o que o livro pede

package pag.cemtreze;

import java.awt.Graphics;

import javax.swing.JPanel;

public class DrawPanelA extends JPanel{
	
	private static final long serialVersionUID = 1L;

	public void paintComponent( Graphics g ){
		
		super.paintComponent( g );
		
		int larg = getWidth();	// largura do painel
		int alt = getHeight();	// altura do painel
		
		// número de passos
		int nPassos = 15;
		
		// tamanho dos passos ( 15 passos )
		int passoX = larg / nPassos;
		int passoY = alt / nPassos;
		
		int c = 1;	// contador
		
		// desenhando
		while ( c <= nPassos ) {

			// origem superior esquerda
			g.drawLine( 0, 0, passoX * c, alt - ( passoY * c ) );

			// origem superior direita
			g.drawLine( larg, 0, larg - ( passoX * c ), alt - ( passoY * c ) );

			// origem inferior esquerda
			g.drawLine( 0, alt, larg - ( passoX * c ), alt - ( passoY * c ) );

			// origem inferior direita
			g.drawLine( larg, alt, passoX * c, alt - ( passoY * c ) );

			// incrementa contador
			c++;

		}
	}
	
}

enderdiablo, pensei que era vc que estava respondendo a dúvida, não com dúvidas, hehehehe.

Estava comentando que seu código faz algo certo, usar o paintComponent. Note que o código original do colega usa o paint.
Você tem alguma dúvida?

Tem um tutorial bastante completo sobre Java 2D no meu portal de jogos, dê uma olhada:
http://www.pontov.com.br/site/index.php/java

ahauhauhua tô mais perdido que tudo.

O que acontece é que eu comecei esse ano na facul, então tô bem cabaço ainda haha. Como estou de férias, queria dar uma forçada na barra, pra ver se me adianto pro próximo semestre, aí me indicaram o livro do Deitel e parei no mesmo exercício que o nosso amigo acima, que acabou me dando uma luz com a parte que ele já tinha resolvido, mas pelo que vc tá dizendo parece que essa não é a melhor maneira, certo? A propósito, até onde o livro ensinou, não tem muita coisa de parte gráfica, esse exercício é opcional, tipo desafio, manja?

Abração

Xiiii viajei Vini…agora que eu entendi.

Vc tá dizendo que o método que eu utilizei está correto…q maravilha haha

É o sono…desculpa ae hehe

Valeu!

[quote=ViniGodoy]Note os detalhes.

  1. Jamais sobrescreva o método paint de qualquer filho de JComponent (JPanel, JLabel, etc…). No lugar, você sobrescreve o método paintComponent;
  2. Jamais altere o estado do objeto Graphics recebido por parâmetro, o ideal é fazer uma cópia de segurança, e descarta-la ao final do método:

@Override public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); //Cópia //Use g2d para desenhar g2d.dispose(); }[/quote]
Só hoje que responder…Valeu pela dica Vini, lembrarei disto para sempre…valeu mesmo…Obrigado a todos