Best regards!
- Jonathan
2012/4/19 Pavel Porvatov <pavel.porva...@oracle.com
<mailto:pavel.porva...@oracle.com>>
Hi Jonathan,
Hi Pavel,
I found Util.invokeOnEDT in awt repository, and have updated
the test case, could you please take another look?
http://cr.openjdk.java.net/~luchsh/7055065_2/
<http://cr.openjdk.java.net/%7Eluchsh/7055065_2/>
The fix looks good. I approve it.
It indeed confused me when found the change in awt repository,
will it be merged to swing repository or is it a special
change for testing infrastructure so went to awt repository?
Swing repository is a legacy one and it's not used. I hope it will
be removed soon to avoid such confusion.
Regards, Pavel
Thanks and best regards!
- Jonathan
On 04/19/2012 11:24 AM, Jonathan Lu wrote:
Hi Pavel,
After a simple grep, I did not see any invokeOnEDT method
from swing or 2d repository, has it been committed yet?
Thanks and best regards!
- Jonathan
On 04/16/2012 07:51 PM, Pavel Porvatov wrote:
Hi Jonathan,
Hi Pavel,
Thanks for reviewing, here's the webrev patch and
automatic test. Could you please help to take
another look?
http://cr.openjdk.java.net/~luchsh/7055065/
<http://cr.openjdk.java.net/%7Eluchsh/7055065/>
The fix looks good. Could you please fix few minor
changes:
1. Don't use full class names like
javax.swing.SwingUtilities when possible. I didn't
find such rule in our Code Conventions but we follow
this rule.
2. Swap two lines please
frame.setVisible(true);
frame.setLocation(0, 0);
That's not critical for the test but we shouldn't
provide bad examples
3. I've recently introduced the Util#invokeOnEDT
method. It can simplify your test and the
getHeaderClickPoint and getCellClickPoint methods can
be removed.
Regards, Pavel
Thanks & regards!
- Jonathan
On 04/13/2012 05:59 PM, Pavel Porvatov wrote:
Hi Jonathan,
The fix looks good. Could you please write an
automatic test, put it into an appropriate
place of repository and make a webrev with fix
and test?
Regards, Pavel
Hello swing-dev,
I've got a patch for bug 7055065, can
anybody please help to take a look?
http://cr.openjdk.java.net/~luchsh/7055065/
<http://cr.openjdk.java.net/%7Eluchsh/7055065/>
And also a simple test case for this issue
here.
/*
* Copyright (c) 2012 Oracle and/or its
affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT
NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can
redistribute it and/or modify it
* under the terms of the GNU General
Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope
that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See
the GNU General Public License
* version 2 for more details (a copy is
included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the
GNU General Public License version
* 2 along with this work; if not, write
to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor,
Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle
Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com
<http://www.oracle.com> if you need
additional information or have any
* questions.
*/
/*
* Portions Copyright (c) 2012 IBM Corporation
*/
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import java.awt.Dimension;
import java.awt.GridLayout;
public class TableDemo extends JPanel {
public TableDemo() {
super(new GridLayout(1, 0));
final String[] columnNames = {
"String", "Number" };
final Object[][] data = { { "aaaa",
new Integer(5) },
{ "bbbb", new Integer(3) },
{ "cccc", new Integer(2) },
{ "dddd", new Integer(20)
}, { "eeee", new Integer(10) } };
final JTable table = new
JTable(data, columnNames);
table.setPreferredScrollableViewportSize(new
Dimension(500, 400));
table.setFillsViewportHeight(true);
TableModel dataModel = new
AbstractTableModel() {
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public Object getValueAt(int
row, int col) {
return data[row][col];
}
public String getColumnName(int
column) {
return columnNames[column];
}
public Class<?>
getColumnClass(int c) {
return getValueAt(0,
c).getClass();
}
public boolean
isCellEditable(int row, int col) {
return col != 5;
}
public void setValueAt(Object
aValue, int row, int column) {
data[row][column] = aValue;
}
};
table.setModel(dataModel);
TableRowSorter<TableModel> sorter =
new TableRowSorter<TableModel>(
dataModel);
table.setRowSorter(sorter);
JScrollPane scrollPane = new
JScrollPane(table);
add(scrollPane);
}
public static void main(String[] args)
throws Exception {
javax.swing.SwingUtilities.invokeAndWait(new
Runnable() {
public void run() {
JFrame frame = new
JFrame("SimpleTableDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TableDemo newContentPane =
new TableDemo();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
});
}
}
To reproduce the problem,
please click on one cell from the "Number"
column, delete all the content but do not
press enter to quit editing status, then
click the column title of "Number" column
to sort, NPE will be thrown.
The cause of this problem is when trying
to quit editing with empty content of a
cell and also try to accept the partially
edited value using stopCellEditing(),
following two actions will be taken.
1, the cellEditor of current table will be
set to null.
2, the value type of this column does not
have a constructor to accept "Object[]"
parameter, false will be returned.
Then swing will try to cancel edition
without accepting the partially edited
value using cancelCellEditing() which will
get null for the value of cellEditor thus
lead to this NPE.
The patch is trying to return earlier
before the type compatibility check of
partially edited values when empty cell
values encountered.
Cheers!
- Jonathan