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()?