我有一个我写的扩展了JPanel的类。当程序启动时,面板上有一个默认的绘图(在paintComponent中实现),用户可以在这个面板上绘图。我试图将整个JPanel保存到mySQL数据库(使用BLOB),这很好,但是当我加载它时,我只能看到默认绘图(没有用户输入)。我想这是因为图形不可序列化,因此无法使用ObjectOutputStream进行保存。 任何想法我怎么能保存整个事情,然后重新加载它?将JPanel保存到mySQL数据库(Java)
我的方式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;
}
为了更好地帮助您更快地发布[SSCCE](http://sscce.org/),顺便说一下BLOB,您可以使用FileIO从数据库读取/写入数据库 – mKorbel
您至少应该发布您的JPanel。 –
不要试图保存'JPanel'。在“BufferedImage”中绘制并显示在面板中。这里是[示例](http://stackoverflow.com/a/12683632/418556)。序列化'BufferedImage'。 –