Desenhar no JPanel

3 respostas
E

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.

3 Respostas

R

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

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();
	}
}
H

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

W

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:

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

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.

Criado 27 de maio de 2005
Ultima resposta 14 de set. de 2011
Respostas 3
Participantes 4