Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6257207

JTable.getDefaultEditor throws NullPointerException

XMLWordPrintable

    • b04
    • x86
    • windows_xp

      FULL PRODUCT VERSION :
      java version "1.6.0-ea"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.6.0-ea-b29)
      Java HotSpot(TM) Client VM (build 1.6.0-ea-b29, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows XP [Version 5.1.2600]

      A DESCRIPTION OF THE PROBLEM :
      NullPointerException was thrown, but not listed as a possible scenario

      REGRESSION. Last worked in version mustang

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Call table.getDefaultEditor(row,column)

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      per javadoc:
      Returns an appropriate editor for the cell specified by row and column. If the TableColumn for this column has a non-null editor, returns that. If not, finds the class of the data in this column (using getColumnClass) and returns the default editor for this type of data.
      ACTUAL -
      NullPointerException

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      Exception in thread "main" java.lang.NullPointerException
              at javax.swing.JTable.getDefaultEditor(JTable.java:1089)
              at javax.swing.JTable.getCellEditor(JTable.java:4375)
              at JTableBugTest2$MyTable.resize(JTableBugTest2.java:63)
              at JTableBugTest2$MyTable.resizeAll(JTableBugTest2.java:52)
              at JTableBugTest2$MyTable.tableChanged(JTableBugTest2.java:44)
              at javax.swing.JTable.setModel(JTable.java:2833)
              at javax.swing.JTable.<init>(JTable.java:408)
              at javax.swing.JTable.<init>(JTable.java:349)
              at JTableBugTest2$MyTable.<init>(JTableBugTest2.java:35)
              at JTableBugTest2.<init>(JTableBugTest2.java:25)
              at JTableBugTest2.main(JTableBugTest2.java:11)

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import javax.swing.table.*;
      import javax.swing.*;
      import javax.swing.event.*;
      import java.awt.*;

      public class JTableBugTest2
      extends JFrame
      {
        public static void main(String[] args)
        {
          JTableBugTest2 tst = new JTableBugTest2();
          tst.setSize(100, 100);
          tst.setVisible(true);
        }

        public JTableBugTest2()
        {
          super("Bug Test");
          DefaultTableModel myModel = new DefaultTableModel();
          myModel.addColumn("Col1");
          myModel.addColumn("Col2");
          myModel.addColumn("Col3");
          myModel.addRow(new Object[]{"item1.1", "item1.2", "item1.3"});
          myModel.addRow(new Object[]{"item2.1", "item2.2", "item2.3"});
          MyTable tbl = new MyTable(myModel);
          this.getContentPane().add(tbl);
        }

        class MyTable
        extends JTable
        implements TableModelListener
        {
          public MyTable(TableModel model)
          {
            super(model);
          }

          public void tableChanged(TableModelEvent event)
          {
            super.tableChanged(event);

            int column = event.getColumn();
            if(column == TableModelEvent.ALL_COLUMNS)
              resizeAll();
            else
              resize(column);
          }

          protected void resizeAll()
          {
            for(int i=0; i<getModel().getColumnCount(); i++)
              resize(i);
          }

          protected void resize(int column)
          {
            TableCellEditor editor = null;
            TableCellRenderer renderer = null;
            Component comp;
            int width=0;
            for(int row=0; row<getModel().getRowCount(); row++)
            {
              editor = this.getCellEditor(row, column);
              if(editor != null)
              {
                comp = editor.getTableCellEditorComponent(
                  this, // table
                  getModel().getValueAt(row,column), // value
                  false, // isSelected
                  row, // row
                  column // column
                );
                if(comp != null)
                  width = Math.max(width, comp.getPreferredSize().width);
            }


            renderer = this.getCellRenderer(row, column);
            if(renderer != null)
            {
              comp = renderer.getTableCellRendererComponent(
                this, // table
                getModel().getValueAt(row,column), // value
                false, // isSelected
                false, // hasFocus
                row, // row
                column // column
              );
              if(comp != null)
                width = Math.max(width, comp.getPreferredSize().width);
            }
          }

          getColumnModel().getColumn(column).setPreferredWidth(width);

          this.revalidate();
          this.repaint();
          }
        }
      }
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      don't use table.getDefaultEditor
      ###@###.### 2005-04-19 06:40:22 GMT

            psadhukhan Prasanta Sadhukhan
            jssunw Jitender S (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: