Problema com o repaint

tenho uma classe View extendida da JFrame que possui um método paint, em uma outra classe EsperaJogada do meu projeto criei um novo método paint, porém quando chamo o repaint relativo ao paint da classe EsperaJogada que não é a extendida da JFrame não acontece o que eu esperava que seria a chamada para o paint da classe EsperaJogada, alguém pode me explicar o porquê?

O que é sua classe EsperaJoga?
Posta o código ai (resumido).

Até mais!

Anexa seu código aí. Assim ficou difícil.

Se EsperaJogada extender de JPanel ou outro componente, é melhor sobrescrever o paintComponent, não o paint.

E se você sobrescreveu o Paint do JFrame, você deve colocar super.paint(graphics) na primeia linha do método, para que ele faça um repaint normal, ou chamar o paint da classe esperaJogada diretamente.

Está tudo muito no ar, ponha os eu código em anexo para podermos te ajudar melhor.

ABAIXO ESTÁ O CÓDIGO
O problema é o seguinte se eu chamo o repaint relacionado ao paint da classe FrameG dentro do método mouseMoved da classe Esp
a malha de pinos fica piscando, já se eu faço como está abaixo criando um paint na classe Joga o chamando o repaint relacionado a ele no mouseMoved não acontece nada, e o que eu queria era que fosse chamado nesse caso com o repaint o paint da classe Joga o que evitaria da malha piscar, lembrando no meu projeto eu tenho que extender a classe FrameG de uma JFrame, esse código é só uma demonstração do meu projeto, outra coisa no paint da FrameG tem 3 linhas de código comentadas caso estejam ativas é que a malha fica piscando comentei para que vissem que quando chamo o repaint relativo ao paint de Joga nada acontece

[code] /*

  • FrameG.java
  • Created on December 4, 2007, 10:04 AM
    */

package View;

import Model.Esp;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

/**
*

  • @author root
    */
    public class FrameG extends javax.swing.JFrame {

    private Graphics g;
    Esp es;

    /** Creates new form FrameG */
    public FrameG() {
    initComponents();
    es = new Esp(this);
    g = getGraphics();

    }

    public Esp getEsp(){

     return es;
    

    }

    /** This method is called from within the constructor to

    • initialize the form.
    • WARNING: Do NOT modify this code. The content of this method is
    • always regenerated by the Form Editor.
      */

    public void paint(Graphics g) {

         super.paint(g);
         malhaDePinos(g);
    

// Graphics2D g2d = (Graphics2D) g;
// g2d.setStroke(new BasicStroke(3.0f));
// g.drawLine(83, 103, es.xValor, es.yValor);

  }
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
private void initComponents() {

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 400, Short.MAX_VALUE)
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 300, Short.MAX_VALUE)
    );
    pack();
}// </editor-fold>                        
public void malhaDePinos(Graphics g){
       
      int x = 80;
      int y = 100;
      int width = 8;
      int heigth = 8;
    
        
      //cria 2D convertendo g para Graphics2D
      Graphics2D g2d = (Graphics2D) g.create();
        
      for(int i=0; i<14; i++){
          for(int j=0; j<14; j++){
                
                g.setColor(Color.ORANGE);
                g.fillRect(x,y,width,heigth);
                x = x + 30;
          }
            
          y = y + 30;
          x = 80;
      }
      
      g2d.dispose();
        
  }

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new FrameG().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
// End of variables declaration                   

}

/*

  • Esp.java
  • Created on December 4, 2007, 10:01 AM
  • To change this template, choose Tools | Template Manager
  • and open the template in the editor.
    */

package Model;

import View.FrameG;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

/**
*

  • @author root
    */
    public class Esp extends Joga implements MouseMotionListener{

    public int xValor;

    public int yValor;

    private FrameG f;

    /** Creates a new instance of Esp */
    public Esp(FrameG frame) {

    f = frame;
    f.addMouseMotionListener(this);
    

    }

    public void mouseMoved(MouseEvent e){

         xValor = e.getX();
         yValor = e.getY(); 
         //repaint referente ao paint da classe Joga                                              
         repaint();
    

    }

    public void mouseDragged(MouseEvent e) {
    }
    }

/*

  • Joga.java
  • Created on December 10, 2007, 10:28 AM
  • To change this template, choose Tools | Template Manager
  • and open the template in the editor.
    */

package Model;

import View.FrameG;
import java.awt.Graphics;
import javax.swing.JPanel;

/**
*

  • @author root
    */
    abstract public class Joga extends JPanel{

    FrameG frame;
    Esp es;

    public void paint(Graphics g) {

       es = frame.getEsp();
       g.drawLine(83, 103, es.xValor, es.yValor);        
    

    }

}[/code]

Pode editar o código aí em cima e usar a tag code, fazendo o favor?

Se não sabe exatamente como fazer isso, dá uma lida aqui:
http://www.guj.com.br/posts/list/50115.java

Fica meio difícil ler assim. :wink:

Já deu para ver alguns problemas.

  1. A classe que extende JPanel deve sobrescrever paintComponent, não paint. Todos os componentes do swing que não são janelas sobrescrevem paintComponent.
  2. Faltou chamar super.paintComponent no início do método.
  3. Você nunca deve usar o objeto graphics diretamente. Alterar o estado desse objeto pode comprometer o funcionamento do Swing. Faça uma cópia do objeto no início do método e libere a sua cópia depois, dessa forma:

public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); //Faz a cópia //Trabalhe com g2d aqui g2d.dispose(); }

Fiz as modificações mas elas não resolvem meu problema quando chamo o repaint no mouseMoved referente ao paintComponent nada acontece

Ok… você chamou o repaint da classe Joga. Mas Joga é um JPanel e, para que um JPanel seja pintado, ele deve ser adicionado ao JFrame.

Me parece que faltou uma linha como
getContentPane().add(esp);

No seu construtor (a linha vai ser um pouco diferente pq vc está usando GroupLayout e pq também falta dizer onde o painel será posicionado).

Entendi mas não sei como proceder tem como vc ser mais claro, esp que vc citou é o painel ou o que, e em que construtor devo fazer isso no de Joga? É que o problema é o seguinte na aplicação real eu criei o form no nettbeans, e na minha janela essa malha de pinos já está dentro de um painel que foi criado com o nettbeans e adcionado ao container do form

esp é o seu painel, da classe Esp, que é filha de Joga.

Voc6e deve adicionar o painel Esp no FrameG. E, até onde eu vi, você não fez isso. Você só deu um new e criou o painel, mas ele não foi efetivamente adicionado no JFrame.

jPanel3.add(painelD, java.awt.BorderLayout.CENTER);
Eu tenho um painel no meu form que é jPanel3, então adcionei meu painel que não havia adcionado ainda “painelD” ao painel criado com o nettbeans que já existia no form mas tá dando esse erro:
Exception in thread “main” java.lang.NullPointerException
mas não creio que é erro de nada que não está instanciado não

[quote=marcelabalbino]jPanel3.add(painelD, java.awt.BorderLayout.CENTER);
Eu tenho um painel no meu form que é jPanel3, então adcionei meu painel que não havia adcionado ainda “painelD” ao painel criado com o nettbeans que já existia no form mas tá dando esse erro:
Exception in thread “main” java.lang.NullPointerException
mas não creio que é erro de nada que não está instanciado não [/quote]

Esse erro só tem um significado. Alguma coisa não está instanciada.
Sugiro que você ponha um breakpoint na linha de comando onde ele ocorre e teste o que não está instanciado. Nem sempre é o componente que a gente desconfia.

Já consegui resolver todos os problemas e adicionar o painel que criei, obrigada pela ajuda

Parabéns! :wink: