I am using Netbeans GUIBuilder so please ignore the ugly variable naming
I set the gui's LAF to nimbus, and when I edit a cell on a JTable I would like it to switch to a Windows LAF since Nimbus' jTextField has a big margin so I can't see half of what I'm typing. Also, when I reselect a jTextfield, my previous input just disappears. I managed to do this, however, when I close the window, a null pointer exception pops up showing this error:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
Successfully connected!
Successfully disconnected!
at sun.font.FontDesignMetrics$MetricsKey.init(FontDesignMetrics.java:199)
at sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:267)
at sun.swing.SwingUtilities2.getFontMetrics(SwingUtilities2.java:933)
at javax.swing.JComponent.getFontMetrics(JComponent.java:1599)
at sun.swing.SwingUtilities2.getFontMetrics(SwingUtilities2.java:322)
at javax.swing.plaf.synth.SynthTabbedPaneUI.paintTab(SynthTabbedPaneUI.java:561)
at javax.swing.plaf.synth.SynthTabbedPaneUI.paintTabArea(SynthTabbedPaneUI.java:474)
at javax.swing.plaf.synth.SynthTabbedPaneUI.paint(SynthTabbedPaneUI.java:403)
at javax.swing.plaf.synth.SynthTabbedPaneUI.update(SynthTabbedPaneUI.java:324)
at javax.swing.JComponent.paintComponent(JComponent.java:752)
at javax.swing.JComponent.paint(JComponent.java:1029)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:567)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5131)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1479)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1410)
at javax.swing.RepaintManager.paint(RepaintManager.java:1224)
at javax.swing.JComponent.paint(JComponent.java:1015)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
at java.awt.Container.paint(Container.java:1780)
at java.awt.Window.paint(Window.java:3375)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
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)
I think it has something to do with the fonts used in Windows LAF and Nimbus.
here's my code:
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (ClassNotFoundException ex) {
Logger.getLogger(AddContainer.class.getName()).log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(AddContainer.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(AddContainer.class.getName()).log(Level.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(AddContainer.class.getName()).log(Level.SEVERE, null, ex);
}
SwingUtilities.updateComponentTreeUI(component);
KeyListener x = new KeyListener() {
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() >= 0x41 && e.getKeyCode() <= 0x5A && e.isControlDown() == false)
((JTextField)component).setText(((JTextField)component).getText().toUpperCase());
}
};
switch(colnum)
{
case 0:
component.addKeyListener(x);
((JTextField)component).setDocument(new JTextFieldFilter(JTextFieldFilter.ALPHA_NUMERIC)); break;
case 2:
((JTextField)component).setDocument(new PlainDocument()); break;
case 3:
((JTextField)component).setDocument(new JTextFieldFilter(JTextFieldFilter.NUMERIC)); break;
case 4:
case 5:
case 6:
case 7:
((JTextField)component).setDocument(new JTextFieldFilter(JTextFieldFilter.FLOAT)); break;
}
return component;
}
public boolean isCellEditable(EventObject evt) {
if (evt instanceof MouseEvent) {
int clickCount;
// For double-click activation
clickCount = 2;
((JTextField)component).setText(((JTextField)component).getText());
return ((MouseEvent)evt).getClickCount() >= clickCount;
}
return true;
}
public String getCellEditorValue() {
return ((JTextField)component).getText();
}
}