2011-03-18 111 views
0

需要幫助來完成我的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); 
    } 
} 
+2

六個問題;十一個答案;零接受;零票。請參閱[如何在這裏提問?](http://stackoverflow.com/faq)。 – trashgod 2011-03-18 14:42:52

回答

5

if(date!=null && GetDayText(date)!= text.getText())

你的意思是if(newdate!=null && GetDayText(newdate)!= text.getText())不是嗎?

當窗口關閉時,如何確保書面文本保存在OnDeleteEvent方法中?

在窗口上註冊一個WindowListener

編輯:

注意,這可能不一定是等於文本返回true: newdate==date
這取決於newdate是完全相同的對象date(這是很可能的,因爲字符串是不可變的和可能出現來自JVM的字符串池)。但是,您最好使用(newdate == null && date == null) || (newdate != null && newdate.equals(date)),即如果兩個字符串都爲空或者它們具有相同的內容。

+0

if(newdate == date)return; if(newdate!= null && GetDayText(newdate)!= text.getText())什麼都不做。當我再次打開日記時,文本不會顯示,但會顯示隔日的文字。 – krunarsson 2011-03-18 14:46:12

+0

您是否調試過該代碼?您是否添加了日誌語句以查看是否拋出異常?例如,你有'catch(Exception e){return「」; }'在'GetDayText()'中,你是否檢查過沒有異常,返回「」? – Thomas 2011-03-18 15:08:27

+0

另一個問題:什麼是「價值」?你可以發佈一些代碼嗎? ESP。 'Value.put(Value,String)'看起來有些奇怪。 – Thomas 2011-03-18 15:13:43