6913768: With default SynthLookAndFeel instance installed new JTable creation leads to throwing NPE
Reviewed-by: peterz
--- a/jdk/src/share/classes/javax/swing/JTable.java Wed Mar 03 17:57:25 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/JTable.java Wed Mar 03 20:08:55 2010 +0300
@@ -2506,10 +2506,7 @@
Color old = this.selectionForeground;
this.selectionForeground = selectionForeground;
firePropertyChange("selectionForeground", old, selectionForeground);
- if ( !selectionForeground.equals(old) )
- {
- repaint();
- }
+ repaint();
}
/**
@@ -2547,10 +2544,7 @@
Color old = this.selectionBackground;
this.selectionBackground = selectionBackground;
firePropertyChange("selectionBackground", old, selectionBackground);
- if ( !selectionBackground.equals(old) )
- {
- repaint();
- }
+ repaint();
}
/**
--- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableUI.java Wed Mar 03 17:57:25 2010 +0300
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTableUI.java Wed Mar 03 20:08:55 2010 +0300
@@ -45,8 +45,7 @@
import javax.swing.JTable;
import javax.swing.LookAndFeel;
import javax.swing.border.Border;
-import javax.swing.plaf.ComponentUI;
-import javax.swing.plaf.UIResource;
+import javax.swing.plaf.*;
import javax.swing.plaf.basic.BasicTableUI;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
@@ -158,7 +157,7 @@
if (gridColor == null) {
gridColor = style.getColor(context, ColorType.FOREGROUND);
}
- table.setGridColor(gridColor);
+ table.setGridColor(gridColor == null ? new ColorUIResource(Color.GRAY) : gridColor);
}
useTableColors = style.getBoolean(context,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTable/6913768/bug6913768.java Wed Mar 03 20:08:55 2010 +0300
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6913768
+ * @summary With default SynthLookAndFeel instance installed new JTable creation leads to throwing NPE
+ * @author Pavel Porvatov
+ * @run main bug6913768
+ */
+
+import javax.swing.*;
+import javax.swing.plaf.synth.SynthLookAndFeel;
+
+public class bug6913768 {
+ public static void main(String[] args) throws Exception {
+ UIManager.setLookAndFeel(new SynthLookAndFeel());
+
+ SwingUtilities.invokeAndWait(new Runnable() {
+ public void run() {
+ JFrame frame = new JFrame();
+
+ JTable table = new JTable(new Object[][]{{"1", "2"}, {"3", "4"}},
+ new Object[]{"col1", "col2"});
+
+ frame.getContentPane().add(new JScrollPane(table));
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ frame.setSize(300, 200);
+ frame.setLocationRelativeTo(null);
+ frame.setVisible(true);
+ }
+ });
+ }
+}