У меня есть JPanel, и это общий контейнер, он может содержать различные компоненты и использовать различные макеты.
Моя цель - сделать глубокую копию этой JPanel, чтобы я мог изменить размер или изменить цвет фона копируемой копии без воздействия на компоненты в исходной JPanel.
Сначала я попытался использовать подход Clone, но я обнаружил, что Clone просто копирует верхний уровень, все компоненты в JPanel копируются поверхностно, что означает, что я просто получил ссылки на компоненты origianl.
и затем я увидел, что в некоторых статьях говорится, что это можно сделать путем сериализации JPanel, но при этом я получаю следующую ошибку:
java.io.NotSerializableException: sun.awt.windows.Win32OffScreenImage
У кого-нибудь есть идеи?
Спасибо,
Sathish
Обновление ::
Это код для глубокого копирования.
static public Object deepCopy(Object oldObj) throws Exception {
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
try {
ByteArrayOutputStream bos =
new ByteArrayOutputStream(); // A
oos = new ObjectOutputStream(bos); // B
oos.writeObject(oldObj); // C
oos.flush(); // D
ByteArrayInputStream bin =
new ByteArrayInputStream(bos.toByteArray()); // E
ois = new ObjectInputStream(bin); // F
return ois.readObject(); // G
} catch (Exception e) {
System.out.println("Exception in ObjectCloner = " + e);
throw (e);
} finally {
oos.close();
ois.close();
}
}
Я передаю JPanel, которая содержит 2 панели, jtable, 2 кнопки.
Но теперь я получаю исключение NullPointer.
Есть ли другой код для этого?