0

我有一个我写的类,它扩展了 JPanel。当程序启动时,面板上有一个默认的绘图(在paintComponent中实现),用户可以在这个面板上绘图。

我正在尝试将整个 JPanel 保存到 mySQL 数据库(使用 BLOB),这很好,但是当我加载它时,我只能看到默认图形(没有用户输入)。我猜这是因为 Graphics 不可序列化,因此无法使用 ObjectOutputStream 保存。知道如何保存整个内容然后重新加载吗?

我将 JPanel 保存到数据库的方式:

protected byte [] convertImageToBytes()
{       
    try
    {
        Connection conn = new SQLConnection("MYDB").getConnection();

        PreparedStatement ps=null;
        String sql;

        RoundTop rt = StoneGUI.getStoneTop();  //MY CUSTOM PANEL CLASS


        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);

        //oos.writeObject(StoneGUI.getStoneTop());
        oos.writeObject(rt);
        oos.flush();
        oos.close();
        bos.close();


        byte [] data= bos.toByteArray();

        sql="UPDATE StonesDB SET image= ? WHERE lotNumber=5555;";
        ps=conn.prepareStatement(sql);
        ps.setObject(1, data);
        ps.execute();


        return data;
    }
    catch (Exception ex)
    {
        System.err.println(ex);
        return null;
    }
4

1 回答 1

3

存储面板是一个奇怪的想法。而是创建您的绘图模型,例如绘图形状列表并将模型序列化以将其存储在数据库中。然后在必须将图纸加载到面板时反序列化模型。

于 2012-10-12T07:17:00.863 回答