Piszę Pinta w którym chcę dodać możliwość dodawanie tekstu. Program opiera się na dodawaniu narysowanego elementu do tablicy typu Shape, potem jest przerysowywanie obrazu i dodawanie wszystkich elementów z listy pętlą. Praktycznie wszystko już mam zrobione, oprócz właśnie dodawania tekstu. Muszę tą zmienną typu String zamienić jakoś na typ Shape, aby dodać ją do listy z innymi figurami.

W obecnej chwili mam taki kod:

text = JOptionPane.showInputDialog(null, "Please input text:", "TEXT");
                
                Font f = panelPaint.getFont().deriveFont(Font.BOLD, 70);
                GlyphVector v = f.createGlyphVector(panelPaint.getFontMetrics(f).getFontRenderContext(), text);
                shapeText = v.getOutline();
                g2.drawString(text, x, y);
                Pen.listShapes.add(shapeText);

Normalnie działa rysowanie tego Stringa na obrazie. Problem zaczyna się, gdy chcę przerysować obraz i narysować te elementy z listy w taki sposób: 'g2.draw(Pen.listShapes.get(i));'.

Log jest następujący:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at java.awt.geom.Path2D$Float.<init>(Unknown Source)
	at java.awt.geom.Path2D$Float.<init>(Unknown Source)
	at sun.java2d.pipe.LoopPipe.draw(Unknown Source)
	at sun.java2d.pipe.PixelToParallelogramConverter.draw(Unknown Source)
	at sun.java2d.SunGraphics2D.draw(Unknown Source)
	at Triangle.clearAfterDrawing(Triangle.java:117)
	at Triangle$2.mouseDragged(Triangle.java:71)
	at java.awt.Component.processMouseMotionEvent(Unknown Source)
	at javax.swing.JComponent.processMouseMotionEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source) 

Pomoże ktoś przekonwertować ten tekst na taki typ, aby było możliwe zapisanie go do listy typu Shape, a potem narysowanie go metodą .draw()?