需要幫助來完成我的java日曆。java日曆幫助
任何人都可以看到爲什麼今天寫的文本沒有保存?
當窗口關閉時,如何確保書面文本保存在OnDeleteEvent方法中?
我的代碼:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import com.toedter.calendar.JCalendar;
public class Diary extends JPanel
{
private JCalendar calendar;
private JTextArea text;
private SimpleDateFormat sdf;
private JScrollPane scroll;
private Value days = null;
private String date = null;
public Diary()
{
calendar = new JCalendar();
sdf = new SimpleDateFormat("dd-MM-yyyy");
text = new JTextArea(5,15);
scroll = new JScrollPane(text);
scroll.setVerticalScrollBarPolicy(
scroll.VERTICAL_SCROLLBAR_ALWAYS);
scroll.setPreferredSize(new Dimension(100, 100));
date = GetCalendarDate();
days = Load();
calendar.addPropertyChangeListener(new OnDaySelected());
calendar.addPropertyChangeListener(new OnDeleteEvent());
setLayout (new BorderLayout());
add(calendar, BorderLayout.NORTH);
add(scroll, BorderLayout.SOUTH);
}
private static Value Load()
{
Value days;
try
{
days = Value.loadFile("Diary.dat");
}
catch(Exception e)
{
days = Value.makeTable();
}
return days;
}
private static void Save(Value days)
{
try
{
Value.saveFile(days,"Diary.dat");
}
catch(Exception e)
{
Value.makeTable();
}
}
private String GetCalendarDate()
{
Date d = calendar.getDate();
String dat = sdf.format(d);
return dat;
}
private String GetDayText(String date)
{
try
{
Value v = Value.makeString(date);
String texti = days.get(v).asString();
return texti;
}
catch(Exception e)
{
return "";
}
}
private void SetDayText(String date, String text)
{
Value v = Value.makeString(date);
if(text == null)
days.put(v,null);
else
days.put(v, Value.makeString(text));
}
public void SetDate(String newdate)
{
if(newdate==date) return;
if(date!=null && GetDayText(date)!= text.getText())
{
SetDayText(date,text.getText());
Save(days);
}
date = newdate;
text.setText(GetDayText(date));
}
private class OnDaySelected implements java.beans.PropertyChangeListener
{
public void propertyChange(PropertyChangeEvent evt)
{
SetDate(GetCalendarDate());
}
}
private class OnDeleteEvent implements java.beans.PropertyChangeListener
{
public void propertyChange(PropertyChangeEvent evt)
{
if(GetDayText(date) != text.getText())
{
SetDayText(date, text.getText());
Save(days);
}
// how to close the program and ensure that unsaved text is saved
// before the application closed?
}
}
public static void main(String[] args)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {}
JFrame frame = new JFrame("Diary");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new Diary());
frame.pack();
frame.setVisible(true);
}
}
六個問題;十一個答案;零接受;零票。請參閱[如何在這裏提問?](http://stackoverflow.com/faq)。 – trashgod 2011-03-18 14:42:52