2010-12-18 14 views
5

Używam BorderFactory do tworzenia utytułowanego obramowania z interfejsem użytkownika Swing o tematyce Ue z interfejsem substancji i przejdę do wyjątku pokazanego poniżej. Próbowałem z LineBorder i działa idealnie, ale wygląda na to, że interfejs substancji w jakiś sposób zakłóca działanie z TitledBorder. Rysunek granicy odbywa się w paintComponent poprzez:Problem związany z interfejsem Substancja i niestandardowy komponent JComponent

if (getBorder() != null) { 
    getBorder().paintBorder(this, g, 0, 0, getWidth(), getHeight()); 
} 

który sam może być nieprawidłowe. Moje pytanie brzmi w zasadzie, jak uzyskać TitledBorder działając bez tworzenia nadrzędnego JPanel i ustawiając go zamiast tego, co wydaje się trochę wyłudzeniem.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at org.pushingpixels.lafwidget.utils.RenderingUtils.desktopHints(RenderingUtils.java:113) 
    at org.pushingpixels.lafwidget.utils.RenderingUtils.installDesktopHints(RenderingUtils.java:85) 
    at org.pushingpixels.substance.internal.utils.border.SubstanceEtchedBorder.paintBorder(SubstanceEtchedBorder.java:132) 
    at javax.swing.border.TitledBorder.paintBorder(TitledBorder.java:330) 
    at javax.swing.JComponent.paintBorder(JComponent.java:947) 
    at javax.swing.JComponent.paint(JComponent.java:1055) 
    at javax.swing.JComponent.paintChildren(JComponent.java:887) 
    at javax.swing.JComponent.paint(JComponent.java:1063) 
    at javax.swing.JComponent.paintChildren(JComponent.java:887) 
    at javax.swing.JComponent.paint(JComponent.java:1063) 
    at javax.swing.JComponent.paintChildren(JComponent.java:887) 
    at javax.swing.JComponent.paint(JComponent.java:1063) 
    at javax.swing.JComponent.paintChildren(JComponent.java:887) 
    at javax.swing.JComponent.paint(JComponent.java:1063) 
    at javax.swing.JLayeredPane.paint(JLayeredPane.java:585) 
    at javax.swing.JComponent.paintChildren(JComponent.java:887) 
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5213) 
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1493) 
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1424) 
    at javax.swing.RepaintManager.paint(RepaintManager.java:1217) 
    at javax.swing.JComponent.paint(JComponent.java:1040) 
    at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39) 
    at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78) 
    at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:115) 
    at java.awt.Container.paint(Container.java:1951) 
    at java.awt.Window.paint(Window.java:3814) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:792) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:739) 
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:688) 
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59) 
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1632) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:660) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 

Z góry dziękuję za pomoc.

+0

Do jakiego komponentu próbujesz dodać obramowanie? Czy dzieje się tak w przypadku wszystkich komponentów? Mówisz, że nie dzieje się tak z 'JPanel's ... – BoffinbraiN

+0

Podklasa JComponent :) –

+1

Możesz mieć więcej szczęścia zgłaszając to bezpośrednio do zespołu Substancji, aby mogli zbadać, lub przynajmniej zaproponować obejście. Zakładam, że problem zniknie, jeśli użyjesz domyślnego LaF. – BoffinbraiN

Odpowiedz

1

To jest błąd w głębiach laf-widget. W tej chwili zakłada się, że każdy obiekt graficzny ma przypisaną GraphicsConfiguration i GraphicsDevice. Mam do tego widelec substancji o nazwie insubstantial, który jest has a fix.

Współrzędne obiektu dla bieżącego migawki, do którego jest on przypisany, to com.gitub.insubstantial: substance: 6.3-SNAPSHOT, a repozytorium snapshot to https://oss.sonatype.org/content/repositories/snapshots/. Przewiduję zwolnienie pociągu 6.3 na koniec czerwca.

+0

Pewnie :) Myślałem także o przejściu do Insubstantial, przy okazji. –

+0

Oznaczę to jako zaakceptowane, ponieważ Substancja nie jest już opracowywana. –

Powiązane problemy