draw in a jpanel that's found in another jpanel

hello

I would like to draw in a jpanel that is found in another jpanel

the pb Im have an exception error ,but I can't figure out the reason

I dont know if Im using the best metod to draw in a jpanel

here is a snap of my code and the error messages that I have

thnak you in advance

private javax.swing.JPanel jPanelAgenda;

publicclass Panel_Agenda_visitextends javax.swing.JPanel{

public Panel_Agenda_visit()

{

//this is the jpanel I would like to draw in

//as you see it is found in a jpanel

jPanelAgenda =new javax.swing.JPanel();

...

...

...

...

...

.addComponent(jPanelAgenda);

}

publicvoid paint(Graphics g)

{

super.paint(g);

afficherAgenda(g);

AgendaRdv agendaGraphique =new AgendaRdv(jPanelAgenda);

// agendaGraphique.drawTimePanel();

//agendaGraphique.drawPanel();

}

}

publicclass AgendaRdv{

private JPanel pan;

private Graphics2D g2;

public AgendaRdv(JPanel pan)

{

this.pan= pan;

g2=(Graphics2D) pan.getGraphics();

}

publicvoid drawTimePanel()

{

g2.drawString("test",400,400);

}

publicvoid drawPanel ()

{

pan.paintComponents(g2);

}

}

Exception occurred during event dispatching:

java.lang.NullPointerException

at java.awt.Component$BltBufferStrategy.contentsLost(Component.java:4002)

at javax.swing.BufferStrategyPaintManager.flushAccumulatedRegion(BufferStrategyPaintManager.java:390)

at javax.swing.BufferStrategyPaintManager.endPaint(BufferStrategyPaintManager.java:364)

at javax.swing.RepaintManager.endPaint(RepaintManager.java:1170)

at javax.swing.JComponent.paint(JComponent.java:991)

at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)

at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)

at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)

at java.awt.Container.paint(Container.java:1727)

at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:725)

at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:670)

at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:650)

at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)

at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:598)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:177)

at java.awt.Dialog$1.run(Dialog.java:1039)

at java.awt.Dialog$2.run(Dialog.java:1085)

at java.security.AccessController.doPrivileged(Native Method)

at java.awt.Dialog.show(Dialog.java:1083)

at java.awt.Component.show(Component.java:1416)

at java.awt.Component.setVisible(Component.java:1369)

at java.awt.Window.setVisible(Window.java:799)

at java.awt.Dialog.setVisible(Dialog.java:979)

at graphique.Fenetre_agenda_visit.<init>(Fenetre_agenda_visit.java:43)

at graphique.MainFrame.Button_main_menu_agendaActionPerformed(MainFrame.java:4099)

at graphique.MainFrame.access$5500(MainFrame.java:64)

at graphique.MainFrame$55.actionPerformed(MainFrame.java:2259)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:377)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:232)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)

at java.awt.Component.processMouseEvent(Component.java:5999)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3240)

at java.awt.Component.processEvent(Component.java:5764)

at java.awt.Container.processEvent(Container.java:1984)

at java.awt.Component.dispatchEventImpl(Component.java:4407)

at java.awt.Container.dispatchEventImpl(Container.java:2042)

at java.awt.Component.dispatchEvent(Component.java:4237)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4248)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3912)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3842)

at java.awt.Container.dispatchEventImpl(Container.java:2028)

at java.awt.Window.dispatchEventImpl(Window.java:2405)

at java.awt.Component.dispatchEvent(Component.java:4237)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:600)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

}

Message was edited by:

linuxchild

[6770 byte] By [linuxchilda] at [2007-11-27 1:26:12]
# 1

No No No.

Don't override paint use paintComponent instead.

Never create a new object inside paint method since it's called every time a paint is needed.

Read here Performing Custom Painting

http://java.sun.com/docs/books/tutorial/uiswing/painting/index.html

Rodney_McKaya at 2007-7-12 0:20:30 > top of Java-index,Desktop,Core GUI APIs...
# 2

ok thnak you for the advice

I have used this method instead of my old method

public void paintComponent(Graphics g)

{

super.paintComponent(g);

afficherAgenda(g);

//

agendaGraphique.drawTimePanel();

//agendaGraphique.drawPanel();

}

I have created the object in the constructor

public Panel_Agenda_visit(

....

agendaGraphique = new AgendaRdv(jPanelAgenda);

...

}

but now I have null pointer exception

java.lang.NullPointerException

at graphique.AgendaRdv.drawTimePanel(AgendaRdv.java:65)

at graphique.Panel_Agenda_visit.paintComponent(Panel_Agenda_visit.java:1290)

this mean that Im not able to get the object graphics from my jpanel

public AgendaRdv(JPanel pan) {

this.pan= pan;

g2=(Graphics2D) pan.getGraphics();

}

any idea ?

Message was edited by:

linuxchild

linuxchilda at 2007-7-12 0:20:30 > top of Java-index,Desktop,Core GUI APIs...
# 3

Im just reposting the thread with the code format

hello

I would like to draw in a jpanel that is found in another jpanel

the pb Im have an exception error ,but I can't figure out the reason

I dont know if Im using the best metod to draw in a jpanel

here is a snap of my code and the error messages that I have

thnak you in advance

private javax.swing.JPanel jPanelAgenda;

public class Panel_Agenda_visit extends javax.swing.JPanel {

public Panel_Agenda_visit()

{

//this is the jpanel I would like to draw in

//as you see it is found in a jpanel

jPanelAgenda = new javax.swing.JPanel();

...

...

...

...

...

.addComponent(jPanelAgenda);

}

public void paint(Graphics g)

{

super.paint(g);

afficherAgenda(g);

AgendaRdv agendaGraphique = new AgendaRdv(jPanelAgenda);

// agendaGraphique.drawTimePanel();

//agendaGraphique.drawPanel();

}

}

public class AgendaRdv {

private JPanel pan;

private Graphics2D g2;

public AgendaRdv(JPanel pan)

{

this.pan= pan;

g2=(Graphics2D) pan.getGraphics();

}

public void drawTimePanel()

{

g2.drawString("test",400,400);

}

public void drawPanel ()

{

pan.paintComponents(g2);

}

}

Exception occurred during event dispatching:

java.lang.NullPointerException

at java.awt.Component$BltBufferStrategy.contentsLost(Component.java:4002)

at javax.swing.BufferStrategyPaintManager.flushAccumulatedRegion(BufferStrategyPaintManager.java:390)

at javax.swing.BufferStrategyPaintManager.endPaint(BufferStrategyPaintManager.java:364)

at javax.swing.RepaintManager.endPaint(RepaintManager.java:1170)

at javax.swing.JComponent.paint(JComponent.java:991)

at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)

at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)

at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)

at java.awt.Container.paint(Container.java:1727)

at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:725)

at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:670)

at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:650)

at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)

at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:598)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:177)

at java.awt.Dialog$1.run(Dialog.java:1039)

at java.awt.Dialog$2.run(Dialog.java:1085)

at java.security.AccessController.doPrivileged(Native Method)

at java.awt.Dialog.show(Dialog.java:1083)

at java.awt.Component.show(Component.java:1416)

at java.awt.Component.setVisible(Component.java:1369)

at java.awt.Window.setVisible(Window.java:799)

at java.awt.Dialog.setVisible(Dialog.java:979)

at graphique.Fenetre_agenda_visit.<init>(Fenetre_agenda_visit.java:43)

at graphique.MainFrame.Button_main_menu_agendaActionPerformed(MainFrame.java:4099)

at graphique.MainFrame.access$5500(MainFrame.java:64)

at graphique.MainFrame$55.actionPerformed(MainFrame.java:2259)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:377)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:232)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)

at java.awt.Component.processMouseEvent(Component.java:5999)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3240)

at java.awt.Component.processEvent(Component.java:5764)

at java.awt.Container.processEvent(Container.java:1984)

at java.awt.Component.dispatchEventImpl(Component.java:4407)

at java.awt.Container.dispatchEventImpl(Container.java:2042)

at java.awt.Component.dispatchEvent(Component.java:4237)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4248)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3912)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3842)

at java.awt.Container.dispatchEventImpl(Container.java:2028)

at java.awt.Window.dispatchEventImpl(Window.java:2405)

at java.awt.Component.dispatchEvent(Component.java:4237)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:600)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

}

linuxchilda at 2007-7-12 0:20:30 > top of Java-index,Desktop,Core GUI APIs...
# 4

Did you even read the tutorial link I gave you?

Don't use getGraphics, all custom painting should be done inside paintComponent function of the component.

If you want further help post a Short, Self Contained, Compilable and Executable, Example Program ([url http://homepage1.nifty.com/algafield/sscce.html]SSCCE[/url]) that demonstrates the problem.

Rodney_McKaya at 2007-7-12 0:20:30 > top of Java-index,Desktop,Core GUI APIs...