首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Swing 組件序列化與反序列化實作:JButton、JTree 持久化範例

     編輯:Java 相關知識

前提條件

Swing 組件(JButton、JTree 等)實作了 Serializable 介面,因此可直接使用 Java 序列化機制持久化至檔案或網路傳輸。

核心 API

  • 寫入:ObjectOutputStream.writeObject(obj)
  • 讀取:ObjectInputStream.readObject()(需強制轉型)

完整程式碼範例

import java.io.*;
import javax.swing.*;

public class SwingSerializationDemo {
    public static void main(String[] args) {
        // 建立組件
        JButton button = new JButton("TEST Button");
        JTree tree = new JTree();

        // 序列化寫入檔案
        try (ObjectOutputStream outBtn = new ObjectOutputStream(new FileOutputStream("button.ser"));
             ObjectOutputStream outTree = new ObjectOutputStream(new FileOutputStream("tree.ser"))) {
            outBtn.writeObject(button);
            outTree.writeObject(tree);
            System.out.println("序列化完成");
        } catch (IOException e) { e.printStackTrace(); }

        // 反序列化讀取
        try (ObjectInputStream inBtn = new ObjectInputStream(new FileInputStream("button.ser"));
             ObjectInputStream inTree = new ObjectInputStream(new FileInputStream("tree.ser"))) {
            JButton btnRestored = (JButton) inBtn.readObject();
            JTree treeRestored = (JTree) inTree.readObject();
            System.out.println("反序列化成功:" + btnRestored.getText());
        } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); }
    }
}

注意事項

  1. 序列化會保存組件完整狀態(文字、模型、監聽器等),反序列化後可直接加入容器顯示。
  2. 若組件持有非暫態的非序列化物件引用,會拋出 NotSerializableException。
  3. 長期儲存建議考慮版本控制(serialVersionUID)與向相容性。
  4. 大型元件樹序列化可能產生龐大檔案,評估效能與儲存成本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved