Помощь с Java-календарем - PullRequest
0 голосов
/ 18 марта 2011

Нужна помощь, чтобы закончить мой календарь 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);
    }
}

1 Ответ

5 голосов
/ 18 марта 2011

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

Ты имеешь в виду if( newdate!=null && GetDayText( newdate)!= text.getText() ) не так ли?

А как я могу обеспечить сохранение записанного текста в методе OnDeleteEvent при закрытии окна?

Зарегистрируйте WindowListener в окне.

Edit:

Обратите внимание, что это не обязательно возвращает true для одинаковых текстов: newdate==date
Это зависит от того, является ли newdate тем же объектом, что и date (что вполне вероятно, поскольку строки неизменяемы и могут поступать из пула строк JVM). Однако вам лучше использовать (newdate == null && date == null) || (newdate != null && newdate.equals(date)), т. Е. Если обе строки имеют значение null или имеют одинаковое содержимое, они равны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...