-
Bug
-
Resolution: Fixed
-
P4
-
6
-
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
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