This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.
We've created a component (JYTabbedPane) which dynamically adds sub-components when a related event occurs. In this case the sub component is a JYLabel which is used as tab title. Unfortunately the event occurs while FormLAF temporary removed related keys from the UIDefaults which leads to the exception below. UIDefaults.getUI() failed: no ComponentUI class for: de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI$5[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,f lags=0,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizontalAlignment=LEADING,horizontalTextPosition=TRAILING,iconTextGap=4,labelFor=,t ext=,verticalAlignment=CENTER,verticalTextPosition=CENTER] java.lang.Error at javax.swing.UIDefaults.getUIError(UIDefaults.java:712) at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:133) at javax.swing.UIDefaults.getUI(UIDefaults.java:742) at javax.swing.UIManager.getUI(UIManager.java:989) at org.jdesktop.swingx.plaf.LookAndFeelAddons.getUI(LookAndFeelAddons.java:308) at de.javasoft.swing.JYLabel.updateUI(JYLabel.java:76) at javax.swing.JLabel.<init>(JLabel.java:145) at javax.swing.JLabel.<init>(JLabel.java:175) at de.javasoft.swing.JYLabel.<init>(JYLabel.java:51) at de.javasoft.swing.JYLabel.<init>(JYLabel.java:46) at de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI$5.<init>(BasicJYTabbedPaneUI.java:1039) at de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI.addTab(BasicJYTabbedPaneUI.java:1039) at de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI.access$17(BasicJYTabbedPaneUI.java:1031) at de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI$4.propertyChange(BasicJYTabbedPaneUI.java:819) at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:339) at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:276) at java.awt.Component.firePropertyChange(Component.java:8132) at de.javasoft.swing.JYTabbedPane.firePropertyChange(JYTabbedPane.java:1345) at de.javasoft.swing.JYTabbedPane.insertTab(JYTabbedPane.java:386) at org.netbeans.modules.form.layoutsupport.delegates.JTabbedPaneSupport.addComponentsToContainer(JTabbedPaneSupport.java:259) at org.netbeans.modules.form.layoutsupport.LayoutSupportManager.addComponentsToContainer(LayoutSupportManager.java:668) at org.netbeans.modules.form.VisualReplicator.addComponent(VisualReplicator.java:391) at org.netbeans.modules.form.VisualReplicator.updateAddedComponents(VisualReplicator.java:357) at org.netbeans.modules.form.FormDesigner$FormListener.run(FormDesigner.java:2452) at org.netbeans.modules.form.FormLAF$3.run(FormLAF.java:329) at org.openide.util.Mutex.doEventAccess(Mutex.java:1361) at org.openide.util.Mutex.readAccess(Mutex.java:271) at org.netbeans.modules.form.FormLAF.executeWithLookAndFeel(FormLAF.java:312) at org.netbeans.modules.form.FormDesigner$FormListener.processEvents(FormDesigner.java:2377) at org.netbeans.modules.form.FormDesigner$FormListener.formChanged(FormDesigner.java:2343) at org.netbeans.modules.form.FormModel.fireEvents(FormModel.java:1296) at org.netbeans.modules.form.FormModel.fireEventBatch(FormModel.java:1269) at org.netbeans.modules.form.FormModel.firePendingEvents(FormModel.java:1232) at org.netbeans.modules.form.FormModel.access$000(FormModel.java:68) at org.netbeans.modules.form.FormModel$2.run(FormModel.java:1212) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEvent(EventQueue.java:597) at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:148) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) For some reason the issue does *not* occur when the component type (JYLabel) already exists in the form - before adding JYTabbedPane. After some investigations what's going wrong, the issue seems to be caused by the FormLAF.useDesignerLookAndFeel(...) method which temporary removes keys from the UIDefaults. While the keys are removed our component tries to create sub-components and fails. Related code line from FormLAF.useDesignerLookAndFeel: defaults.keySet().removeAll(netbeansDefaults.keySet()); The issue also occurs with NetBeans 6.9. Thanks, Wolfgang
I was able to reproduce this issue with the latest NetBeans build. It seems to be caused by the fact that JYTabbedPane modifies UIDefaults when a new tab is added. Our look and feel-related hacks do not expect this. The relevant stacktrace is javax.swing.UIDefaults.put(UIDefaults.java:329) o.n.m.form.FormLAF$DelegatingDefaults.put(FormLAF.java:725) org.jdesktop.swingx.plaf.LookAndFeelAddons.loadDefaults (LookAndFeelAddons.java:140) org.jdesktop.swingx.plaf.AbstractComponentAddon.initialize (AbstractComponentAddon.java:51) org.jdesktop.swingx.plaf.LookAndFeelAddons.contribute (LookAndFeelAddons.java:260) de.javasoft.synthetica.addons.SyntheticaAddons.contribute (SyntheticaAddons.java:212) de.javasoft.swing.JYLabel.<clinit>(JYLabel.java:38) de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI.addTab (BasicJYTabbedPaneUI.java:1029) de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI.access$17 (BasicJYTabbedPaneUI.java:1021) de.javasoft.swing.plaf.basic.BasicJYTabbedPaneUI$4.propertyChange (BasicJYTabbedPaneUI.java:809) java.beans.PropertyChangeSupport.firePropertyChange (PropertyChangeSupport.java:339) java.beans.PropertyChangeSupport.firePropertyChange (PropertyChangeSupport.java:276) java.awt.Component.firePropertyChange(Component.java:8132) de.javasoft.swing.JYTabbedPane.firePropertyChange(JYTabbedPane.java:1345) de.javasoft.swing.JYTabbedPane.insertTab(JYTabbedPane.java:386) o.n.m.form.layoutsupport.delegates.JTabbedPaneSupport.addComponentsToContainer (JTabbedPaneSupport.java:259) o.n.m.form.layoutsupport.LayoutSupportManager.addComponents (LayoutSupportManager.java:538) o.n.m.form.FormModel.addVisualComponent(FormModel.java:459) o.n.m.form.MetaComponentCreator.addVisualComponent2 (MetaComponentCreator.java:978) o.n.m.form.MetaComponentCreator.addPrecreatedComponent (MetaComponentCreator.java:363) o.n.m.form.HandleLayer$NewComponentDrag.end(HandleLayer.java:3145) o.n.m.form.HandleLayer$ComponentDrag.end(HandleLayer.java:2479) o.n.m.form.HandleLayer.endDragging(HandleLayer.java:1263) o.n.m.form.HandleLayer.mousePressed(HandleLayer.java:1954) ...
Fixed - addPrecreatedComponent() uses FormLAF block by now. Modified file: http://hg.netbeans.org/jet-main/rev/59ef92f67af6