0

JPanelを拡張したクラスがあります。プログラムが起動すると、パネルにデフォルトの描画(paintComponentで実装)があり、ユーザーはこのパネルに描画できます。

JPanel全体を(BLOBを使用して)mySQLデータベースに保存しようとしていますが、ロードすると、デフォルトの図面のみが表示されます(ユーザー入力なし)。グラフィックはシリアル化できないため、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

パネルを収納するという発想がおかしい。代わりに、描画シェイプのリストなど、描画のモデルを作成し、モデルをシリアル化して DB に保存します。次に、図面をパネルにロードする必要があるときに、モデルを逆シリアル化します。

于 2012-10-12T07:17:00.863 に答える