diff --git a/src/java.desktop/share/classes/javax/swing/table/JTableHeader.java b/src/java.desktop/share/classes/javax/swing/table/JTableHeader.java index 941297ab586..d14b5970829 100644 --- a/src/java.desktop/share/classes/javax/swing/table/JTableHeader.java +++ b/src/java.desktop/share/classes/javax/swing/table/JTableHeader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2023, 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 @@ -743,19 +743,6 @@ public class JTableHeader extends JComponent implements TableColumnModelListener resizingColumn = aColumn; } - /** - * See readObject and writeObject in - * JComponent for more - * information about serialization in Swing. - */ - @Serial - private void writeObject(ObjectOutputStream s) throws IOException { - s.defaultWriteObject(); - if ((ui != null) && (getUIClassID().equals(uiClassID))) { - ui.installUI(this); - } - } - private int getWidthInRightToLeft() { if ((table != null) && (table.getAutoResizeMode() != JTable.AUTO_RESIZE_OFF)) { diff --git a/test/jdk/javax/swing/JTableHeader/SerializeJTableHeader.java b/test/jdk/javax/swing/JTableHeader/SerializeJTableHeader.java new file mode 100644 index 00000000000..efdf9dd03c8 --- /dev/null +++ b/test/jdk/javax/swing/JTableHeader/SerializeJTableHeader.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023, 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 if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6450193 + * @key headful + * @summary JTableHeader doesn't uninstall UI after first serialization + * @run main SerializeJTableHeader + */ + +import javax.swing.table.JTableHeader; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import javax.swing.SwingUtilities; + +import java.io.ByteArrayOutputStream; +import java.io.ObjectOutputStream; + +public class SerializeJTableHeader { + + private static void setLookAndFeel(UIManager.LookAndFeelInfo laf) { + try { + UIManager.setLookAndFeel(laf.getClassName()); + } catch (UnsupportedLookAndFeelException ignored) { + System.out.println("Unsupported L&F: " + laf.getClassName()); + } catch (ClassNotFoundException | InstantiationException + | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + public static void main(String[] args) throws Exception { + for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) { + System.out.println("Testing L&F: " + laf); + setLookAndFeel(laf); + JTableHeader jth = new JTableHeader(); + for (int i = 0; i < 10; i++) { + try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos)) { + oos.writeObject(jth); + oos.writeObject(jth.getAccessibleContext()); + } + } + } + } +}