我有一个自己编写的扩展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;
}
最佳答案
存储面板是一个奇怪的想法。而是为您的图纸创建模型,例如图形形状列表并序列化模型以将其存储在DB中。
然后在必须将工程图加载到面板中时反序列化模型。