Duvida no método (GUI)[RESOLVIDO]

Olá Pessoal. XD

Bom minha duvida é no método paintComponent() da classe abaixo.
Queria, se possível, a ajuda dos amigos para minha compreensao do porque o método paintComponent é chamando dentro dele mesmo?
Já estudei recursividade, é isso que acontece no método abaixo? Se não. Desculpe a inocencia.

Segue o código abaixo:

//Desenha duas linhas que se cruzam em um panel
import java.awt.Graphics;
import javax.swing.JPanel;

public class DrawPanel extends JPanel{

    //desenha um X a partir dos cantos do painel
    public void paintComponent(Graphics g){

        //Chama paintComponent para assegurar que o painel é exibido corretamente
        super.paintComponent(g);

        int width = getWidth();
        int height = getHeight();

        //Desenha uma linha a partir do canto superior esquerdo até o inferior direito
        g.drawLine(0, 0, width, height);

    } //Fim do método paintComponent

} //Fim da classe DrawPanel

Segue o código da classe para executar o aplicativo:

//Aplicativo para exibir uma DrawPanel
import javax.swing.JFrame;

public class DrawPanelTest {

    public static void main(String args[]){

        //Cria um painel que contém nosso desenho
        DrawPanel panel = new DrawPanel();
        
        //Cria um novo frame para armazenar o painel
        JFrame application = new JFrame();

        //configura o frame para ser encerrado quando é fechado
        application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        application.add(panel); // adiciona o painel ao frame
        application.setSize(250, 250); // configura o tamanho do frame
        application.setVisible(true); // torna o frame visível

    } //Fim do main

} //Fim da classe DrawPanelTest

Se os amigos puderem opinar a respeito do código dando dicas de melhoras no código-fonte, também aceito XD

Desde já agradeço! :slight_smile:

Ele não chama paintComponent(g);
Ele chama super.paintComponent(g);

Essa palavra super equivale ao método paintComponent da classe pai
Antes de executar o paintComponent da classe em questão ele executa da classe pai primeiro

Mas no caso de onde vem essa herança, da classe que criei?

Grato!

A sua classe herda JPanel que por sua vez herda JComponent
Na Classe JComponent possui um método paintComponent
E é esse método que é executado quando vc chamou o super.paintComponent

Entendi cara.
Este exemplo é do livro de java dos Deitel.

Bem que eles podiam escrever o metodo com outro nome, confundi legal!

Agradesço a atenção cara…

Abrs :slight_smile:

É bom ler um pouco de teoria leia os artigos Conhecendo o JFrame e uma visão rápida sobre java 2D do meu site. Vai te ajudar bastante.

Valeu Pessoal.

Abrs

[quote=Thiago de Paula Beserra]Olá Pessoal. XD

Bom minha duvida é no método paintComponent() da classe abaixo.
Queria, se possível, a ajuda dos amigos para minha compreensao do porque o método paintComponent é chamando dentro dele mesmo?
Já estudei recursividade, é isso que acontece no método abaixo? Se não. Desculpe a inocencia.

Segue o código abaixo:

//Desenha duas linhas que se cruzam em um panel
import java.awt.Graphics;
import javax.swing.JPanel;

public class DrawPanel extends JPanel{

    //desenha um X a partir dos cantos do painel
    public void paintComponent(Graphics g){

        //Chama paintComponent para assegurar que o painel é exibido corretamente
        super.paintComponent(g);

        int width = getWidth();
        int height = getHeight();

        //Desenha uma linha a partir do canto superior esquerdo até o inferior direito
        g.drawLine(0, 0, width, height);

    } //Fim do método paintComponent

} //Fim da classe DrawPanel

Segue o código da classe para executar o aplicativo:

//Aplicativo para exibir uma DrawPanel
import javax.swing.JFrame;

public class DrawPanelTest {

    public static void main(String args[]){

        //Cria um painel que contém nosso desenho
        DrawPanel panel = new DrawPanel();
        
        //Cria um novo frame para armazenar o painel
        JFrame application = new JFrame();

        //configura o frame para ser encerrado quando é fechado
        application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        application.add(panel); // adiciona o painel ao frame
        application.setSize(250, 250); // configura o tamanho do frame
        application.setVisible(true); // torna o frame visível

    } //Fim do main

} //Fim da classe DrawPanelTest

Se os amigos puderem opinar a respeito do código dando dicas de melhoras no código-fonte, também aceito XD

Desde já agradeço! :slight_smile:
[/quote]

A leitura ajudou bastante, obrigado aí ViniGodoy.

Tentando fazer a segunda figura deste estudo de caso do livro Deitel que são as linhas que se estendem em todos os cantos, não consegui fazer somente as linhas que seriam da direita para a parte abaixo do painel.

Segue aí a classe com as extremidades que consegui fazer:

Classe: Janela que seria a Classe: DrawPanel

package pagina107;

import java.awt.Graphics;

import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Janela extends JPanel {
	public void paintComponent( Graphics g ) {
		super.paintComponent(g);
		int height = getHeight();
		int passos = 15;
		// extremidade do painel na esquerda abaixo
		g.drawLine(0, 0, passos, height);
		g.drawLine(0, passos * 2, passos * 2, height);
		g.drawLine(0, passos * 3, passos * 3, height);
		g.drawLine(0, passos * 4, passos * 4, height);
		g.drawLine(0, passos * 5, passos * 5, height);
		g.drawLine(0, passos * 6, passos * 6, height);
		g.drawLine(0, passos * 7, passos * 7, height);
		g.drawLine(0, passos * 8, passos * 8, height);
		g.drawLine(0, passos * 9, passos * 9, height);
		g.drawLine(0, passos * 10, passos * 10, height);
		g.drawLine(0, passos * 11, passos * 11, height);
		g.drawLine(0, passos * 12, passos * 12, height);
		g.drawLine(0, passos * 13, passos * 13, height);
		g.drawLine(0, passos * 14, passos * 14, height);
		g.drawLine(0, passos * 15, passos * 15, height);
		g.drawLine(0, passos * 16, passos * 16, height);
		g.drawLine(0, passos * 17, passos * 17, height);
		g.drawLine(0, passos * 18, passos * 18, height);
		// extremidade do painel na esquerda acima
		g.drawLine(0, height, passos, 0);
		g.drawLine(0, height - (passos * 2), passos * 2, 0);
		g.drawLine(0, height - (passos * 3), passos * 3, 0);
		g.drawLine(0, height - (passos * 4), passos * 4, 0);
		g.drawLine(0, height - (passos * 5), passos * 5, 0);
		g.drawLine(0, height - (passos * 6), passos * 6, 0);
		g.drawLine(0, height - (passos * 7), passos * 7, 0);
		g.drawLine(0, height - (passos * 8), passos * 8, 0);
		g.drawLine(0, height - (passos * 9), passos * 9, 0);
		g.drawLine(0, height - (passos * 10), passos * 10, 0);
		g.drawLine(0, height - (passos * 11), passos * 11, 0);
		g.drawLine(0, height - (passos * 12), passos * 12, 0);
		g.drawLine(0, height - (passos * 13), passos * 13, 0);
		g.drawLine(0, height - (passos * 14), passos * 14, 0);
		g.drawLine(0, height - (passos * 15), passos * 15, 0);
		g.drawLine(0, height - (passos * 16), passos * 16, 0);
		g.drawLine(0, height - (passos * 17), passos * 17, 0);
		g.drawLine(0, height - (passos * 18), passos * 18, 0);
		// extremidade do painel na direita acima
		g.drawLine(height, passos, 0, 0);
		g.drawLine(height, passos * 2, passos * 2, 0);
		g.drawLine(height, passos * 3, passos * 3, 0);
		g.drawLine(height, passos * 4, passos * 4, 0);
		g.drawLine(height, passos * 5, passos * 5, 0);
		g.drawLine(height, passos * 6, passos * 6, 0);
		g.drawLine(height, passos * 7, passos * 7, 0);
		g.drawLine(height, passos * 8, passos * 8, 0);
		g.drawLine(height, passos * 9, passos * 9, 0);
		g.drawLine(height, passos * 10, passos * 10, 0);
		g.drawLine(height, passos * 11, passos * 11, 0);
		g.drawLine(height, passos * 12, passos * 12, 0);
		g.drawLine(height, passos * 13, passos * 13, 0);
		g.drawLine(height, passos * 14, passos * 14, 0);
		g.drawLine(height, passos * 15, passos * 15, 0);
		g.drawLine(height, passos * 16, passos * 16, 0);
		g.drawLine(height, passos * 17, passos * 17, 0);
		g.drawLine(height, passos * 18, passos * 18, 0);
	}
}

Classe: JanelaTeste que seria a Classe: DrawPanelTest

package pagina107;
import javax.swing.JFrame;
public class JanelaTeste {
	public static void main (String[] args){
		Janela janela = new Janela();
		JFrame application = new JFrame();
		application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		application.add( janela );
		application.setSize( 275, 300 );
		application.setVisible( true );	
	}
}

Enfim, peguei uma ajuda para esse exercício neste tópico:

Visando tentar me ajudar e também aos demais do grupo, achei que ficou feio o código, rsrs, mas talvez possa clarear para alguém essa minha coisa feia aí, rsrs!

Gostei dos artigos, obrigado!