我有一個JPanel,它是一個通用容器,它可以容納各種組件並使用各種佈局。在java中獲取自定義JPanel的深層副本
我的目的是製作此JPanel的深層副本,以便我可以調整或更改複製的背景顏色,而不會影響原始JPanel中的組件。
首先我嘗試使用克隆方法,但我發現克隆只是複製頂層,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包含2panels,jtable,2buttons。 但現在我得到NullPointer異常。 有沒有其他的代碼可以做到這一點?
爲了解決內部'NotSerializableException'使用'實現Serializable' –
是否有任何其他代碼來做到這一點? – Sathish
你說你有一個通用面板,但我想你知道該面板是如何構建的?爲什麼不以同樣的方式創建一個新實例? – Kaj