使用Substance UI和自定义JComponent时的TitledBorder问题

5
我正在使用BorderFactory创建一个带有Substance UI主题的Swing用户界面的标题边框,但我遇到了下面显示的异常。我尝试使用LineBorder,它完美地工作,但似乎Substance UI在某种程度上干扰了TitledBorder。边框绘制通过paintComponent完成:
if (getBorder() != null) {
   getBorder().paintBorder(this, g, 0, 0, getWidth(), getHeight());
}

它本身可能是不正确的。我的问题实质上是如何在不创建父JPanel并将其设置在上面的情况下使TitledBorder正常工作,这似乎有点像一种逃避责任的做法。

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)

Thanks in advance for any help.


你想要给哪个组件添加边框?所有的组件都会出现这种情况吗?你说这种情况不会发生在 JPanel 上... - BoffinBrain
1
你可以直接向Substance团队报告此问题,以便他们进行调查或至少提供解决方法。我假设如果您使用默认的LaF,则问题会消失。 - BoffinBrain
你解决了这个问题吗?有进展了吗?也许你能提供一个SSCCE来说明这个问题吗?我想试一下。 - Boro
我通过将组件放入面板中,并给该面板加上边框,来解决了这个问题 :) - Chris Dennett
1个回答

1

当然 :) 顺便说一下,我也在考虑转换到Insubstantial。 - Chris Dennett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接