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í.
[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.