Desenhar no JPanel

Como faço pra desenhar um retangulo em um JPanel. Ja tentei obter o graphics dele, mas da nulo. Da pra colocar um exemplo simples de um retangulo desenhado no JPanel, so pra eu ter uma ideia. Falo.

Fala Lopes,

Cara, não sei se é exatamente isso o que quer, fiz esse arquivo, foi mal o jeito, sei que está ruim, mais é só pra mostrar o retângulo para ter uma idéia. OK.

Abraçoss
Qq coisa estamos aí. :slight_smile:

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

/*

  • Created on 27/05/2005
  • TODO To change the template for this generated file go to
  • Window - Preferences - Java - Code Style - Code Templates
    */

/**

  • @author Rodrigo Achilles Pereira
  • TODO To change the template for this generated type comment go to
  • Window - Preferences - Java - Code Style - Code Templates
    */
    public class Grafico extends JFrame
    {
    public Grafico()
    {
    this.setResizable(false);
    this.setVisible(true);
    this.setSize(300, 200);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public void paint(Graphics g)
    {
    g.setColor(Color.WHITE);
    g.draw3DRect(100, 50, 100, 40, false);
    g.setColor(Color.GRAY);
    g.fill3DRect(100, 50, 100, 40, false);
    }
    public static void main(String[] args)
    {
    new Grafico();
    }
    }[/code]

Como é um JPanel você deve sobrescrever o metado com essa assinatura:

Olá pessoal!

Quero desenhar um círculo em um JPanel, e para isso criei duas classes: A FormaGeometrica, que extende JPanel, e circular, que extende FormaGeometrica.

Seguem:

[code]import java.awt.*;
import javax.swing.JPanel;

public abstract class FormaGeometrica extends JPanel{
int posX,posY;
Graphics g;

public FormaGeometrica() {
    this.posX = 0;
    this.posY = 0;
}    

public void setX(int x) {
    this.posX = x;
}

public void setY(int y) {
    this.posY = y;
}    

@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);
    desenha(g);
}

public abstract void desenha(Graphics g);        

}

[/code]

[code]import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;

public class Circular extends FormaGeometrica {
private int raio1,raio2;
Color c;

public Circular() {
    this.raio1 = 0;
    this.raio2 = 0;
}    

public void setRaio1(int raio1) {
    this.raio1 = raio1;
}

public void setRaio2(int raio2) {
    this.raio2 = raio2;
}    

public void desenha(Graphics g) {
    Graphics2D g1 = ( Graphics2D ) g; 
    Ellipse2D oval = new Ellipse2D.Double(posX,posY,raio1,raio2);
    g1.setColor(c.BLACK);
    g1.fill(oval);
    g.setColor(c.BLUE);
    g.drawOval(posX,posY,raio1,raio2);
    g.fillOval(posX,posY,raio1,raio2);
}

}
[/code]

Para desenhar a forma, eu rodo uma aplicação onde eu clico em um botão para desenhar o círculo. Porém, ao clicar neste botão, o compilador está me retornando a seguinte saída:

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at graf2d.Circular.desenha(Circular.java:30)
at graf2d.Graf2DView.btnCircularActionPerformed(Graf2DView.java:384)
at graf2d.Graf2DView.access$800(Graf2DView.java:24)
at graf2d.Graf2DView$4.actionPerformed(Graf2DView.java:146)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6288)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Alguém pode me ajudar, por favor?

Obrigado.