package t;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;
 
public class MyCalendar extends JFrame implements Runnable {
 
  
private static final long serialVersionUID = 5824544048074206949L;
public static final String WEEK_SUN = "SUN"; 
    public static final String WEEK_MON = "MON"; 
    public static final String WEEK_TUE = "TUE"; 
    public static final String WEEK_WED = "WED"; 
    public static final String WEEK_THU = "THU"; 
    public static final String WEEK_FRI = "FRI"; 
    public static final String WEEK_SAT = "SAT";
    private javax.swing.JMenuItem miWriteDayMemo;
    public static final Color background = Color.white; //设置背景色
    public static final Color foreground = Color.black;//设置前景色
    public static final Color headerBackground = Color.lightGray; //设置标题行的背景色
    public static final Color headerForeground = Color.BLACK; //设置标题行的前景色
    public static final Color selectedBackground = Color.blue; //设置选中cell的背景色
    public static final Color selectedForeground = Color.white;//设置标选中cell的前景色
    JPopupMenu  pm ;
    private JPanel cPane; 
    private JLabel yearsLabel; 
    private JSpinner yearsSpinner; 
    private JLabel monthsLabel,currentTime; 
    private JComboBox monthsComboBox; 
    private JTable daysTable; 
    private AbstractTableModel daysModel; 
    private Calendar calendar; 
    private int count = 10;
    private String today = "";
    private String finalToday = "";
    private SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");
    private Date now = new Date();
    PopupMenu popupMenu1 = new PopupMenu(); 
    MenuItem menuItem1 = new MenuItem(); 
    MenuItem menuItem2 = new MenuItem(); 
    MenuItem menuItem3 = new MenuItem();
    public MyCalendar(String s)  { 
     super(s);
        finalToday = sdfDate.format(now);
     setSize(400, 300); 
     setLocation(120, 120); 
     setVisible(true);
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        MenuBar1();
        init();
        }
 
    public void init() { 
      Container con = getContentPane(); 
    //con.setLayout(new BorderLayout()); 
     cPane=new JPanel();
     con.add(cPane);
      JPanel Panel=new JPanel();
      cPane.setLayout(new BorderLayout());
      cPane.add(Panel,BorderLayout.NORTH);
     
       currentTime=new JLabel("");
        calendar = Calendar.getInstance(); 
        calendar = Calendar.getInstance();
        yearsLabel = new JLabel("年份: "); 
       
        yearsSpinner = new JSpinner(); 
        yearsSpinner.setEditor(new JSpinner.NumberEditor(yearsSpinner, "0000"));
        yearsSpinner.setValue(new Integer(calendar.get(Calendar.YEAR)));
      //添加侦听器(每次点击时)
        yearsSpinner.addChangeListener(new ChangeListener() { 
                public void stateChanged(ChangeEvent changeEvent) { 
                    int day = calendar.get(Calendar.DAY_OF_MONTH);
                    calendar.set(Calendar.DAY_OF_MONTH, 1);
                    calendar.set(Calendar.YEAR, ((Integer) yearsSpinner.getValue()).intValue());
                    int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
                    calendar.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day);
                    updateView(); 
                } 
            });
 
    
 
        monthsLabel = new JLabel("月份: "); 
        monthsComboBox = new JComboBox(); 
        for (int i = 1; i <= 12; i++) { 
            monthsComboBox.addItem(new Integer(i)); 
        } 
        monthsComboBox.setSelectedIndex(calendar.get(Calendar.MONTH)); //设置monthsComboBox的当前值为当前月份
      //添加侦听器(每次点击时)
        monthsComboBox.addActionListener(new ActionListener() { 
                public void actionPerformed(ActionEvent actionEvent) {
                    int day = calendar.get(Calendar.DAY_OF_MONTH);
                    calendar.set(Calendar.DAY_OF_MONTH, 1);
                    calendar.set(Calendar.MONTH, monthsComboBox.getSelectedIndex());
                    int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);  //得到某年某月的日子的最大值
                    calendar.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day);
                    updateView(); 
                } 
            }); 
       
        
        Panel.add(yearsLabel);
        Panel.add(yearsSpinner);
        Panel.add(monthsLabel);
        Panel.add(monthsComboBox);
        Panel.add(currentTime);
              //设置一个要设置一个 7 行 7 列的表,详见API
        daysModel = new AbstractTableModel() { 
           
private static final long serialVersionUID = -6432324501689814210L;
public int getRowCount() { 
                    return 7; 
                }
 
                public int getColumnCount() { 
                    return 7; 
                }
 
                public Object getValueAt(int row, int column) { 
                    if (row == 0) 
                    { 
                        return getHeader(column); //得到列标题
                    } 
                    row--; 
                    Calendar calendar = (Calendar) MyCalendar.this.calendar.clone();
                    calendar.set(Calendar.DAY_OF_MONTH, 1);
                    int dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 
                    int firstDay = calendar.get(Calendar.DAY_OF_WEEK) - 1; 
                    int index = row * 7 + column; 
                    int dayIndex = index - firstDay + 1;
                    if (index < firstDay || dayIndex > dayCount) { 
                        return null; 
                    } else { 
                        return new Integer(dayIndex); 
                    } 
                } 
            };
 
        daysTable = new CalendarTable(daysModel, calendar); 
        daysTable.setCellSelectionEnabled(true);//设置此表是否允许同时存在行选择和列选择。当允许时,表将行选择模型和列选择模型的相交部分作为选定的单元格
        daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
        daysTable.setDefaultRenderer(daysTable.getColumnClass(0), new TableCellRenderer() { 
                public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 
                                                               boolean hasFocus, int row, int column) { 
                    String text = (value == null) ? "" : value.toString(); //如果为空就不显示,为对应日期则显示
                    JLabel cell = new JLabel(text); 
                    cell.setOpaque(true); //如果为 true,则该组件绘制其边界内的所有像素。否则该组件可能不绘制部分或所有像素,从而允许其底层像素透视出来。 
                    //设置标题列以及选中日期的前景色和背景色
                    if (row == 0) 
                    { 
                        cell.setForeground(headerForeground); 
                        cell.setBackground(headerBackground); 
                    } 
                    else 
                    { 
                        if (isSelected)
                        { 
                            cell.setForeground(selectedForeground); 
                            cell.setBackground(selectedBackground); 
                        } else
                        { 
                            cell.setForeground(foreground); 
                            cell.setBackground(background); 
                        } 
                    }
 
                    return cell; 
                } 
            });
        updateView();
        cPane.add(daysTable, BorderLayout.CENTER); 
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.YEAR, ((Integer) yearsSpinner.getValue()).intValue());
        int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        calendar.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day);
        updateView(); 
        con.validate(); //取得容器上的所有组件
        validate();
    }
 
   

解决方案 »

  1.   

    package t;
    import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileWriter;
    import java.io.InputStreamReader;import javax.swing.BorderFactory;
    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;public class e extends JDialog { JLabel label1, label2; 
    public JPanel panel,pane2;
    JButton btnsave,btnrewrite;
    JScrollPane spTa;
    JTextArea taMsg ;
     Container con = getContentPane(); 
     private static final String path = "D:/java/Memo.BOX";
        private File file = null;
        private String date;
       // private boolean a2;
        //JFrame b;
    public e(String date)


    setSize(300, 200); 
    setLocation(220, 120); 
    setVisible(true);
     a();
    this.date = date;
      setTitle("编写备忘录  " + date);
     setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
     
    }
    public void a()
    {  
    con.setLayout(new GridLayout(2,1));//设置GridLayout布局
    con.setLayout(new BorderLayout());
    //spTa.setBackground(new java.awt.Color(255, 255, 255));
            //spTa.setBorder(javax.swing.BorderFactory.createTitledBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 255), 1, true), "备忘录内容"));
            //taMsg.setColumns(20);
            //taMsg.setLineWrap(true);
            //taMsg.setRows(5);
            ///spTa.setViewportView(taMsg);
            //spTa.add(taMsg);
    btnsave=new JButton("保存");
    btnrewrite=new JButton("重写"); taMsg=new JTextArea();
    taMsg.setColumns(20);
            taMsg.setLineWrap(true);//设置文本区的换行策略
            taMsg.setRows(5); //设置此 TextArea 的行数。
           taMsg.setBorder(BorderFactory.createTitledBorder("请写备忘录"));
            //taMsg.setBorder(BorderFactory.createTitledBorder(""));
    spTa=new JScrollPane(taMsg);//将JTextArea加到滚动条;
            con.add(spTa);//居中显示        //con.add(spTa,BorderLayout.CENTER);//居中显示
            panel = new JPanel(); 
      con.add(panel,BorderLayout.SOUTH);
    panel.add(btnsave);
    panel.add(btnrewrite);

    btnrewrite.addActionListener(new ActionListener()
    {
                public void actionPerformed(ActionEvent evt) {
                 btnrewritetActionPerformed(evt);
                } 
                });
    btnsave.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent evt) {
         btnsaveActionPerformed(evt);
          } 
    });  


            
      con.validate(); //取得容器上的所有组件
      validate(); 
    }
    protected void btnsaveActionPerformed(ActionEvent evt) {

    saveMemo();
    }
    public  void btnrewritetActionPerformed(ActionEvent evt) {
     taMsg.setText("");
            taMsg.grabFocus();

    }

     private void saveMemo() {
            //获取文本区域中的内容
            String memo = taMsg.getText().trim();
            //创建一个用于保存内容的字符串
            String writeFile = new String();
            //创建一个用于读取原文件内容的字符串
            String readFile = new String();
            //若本次编写备忘录内容为空,则提示用户
            if (memo.length() == 0) {
                JOptionPane.showMessageDialog(this, "备忘录内容不能为空");
                return;
            }
            //文件不存在时需要自动创建
            if (file == null) {
                file = new File(path);
            }
            if (!file.exists()) {
                try {
                    //创建文件必须的文件夹
                    file.getParentFile().mkdirs();
                    //创建相应文件
                    file.createNewFile();
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(this, "创建备忘录文件失败!");
                    return;
                }
            }
            try {
                //从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取
                BufferedReader bf = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
                while ((readFile = bf.readLine()) != null) {    //读取一个文本行
                    //将读取到的文本行保存下来并在其后面加上回车(即同时换行)
                    writeFile += readFile + "\r\n";
                }
                //关闭字符输入流
                bf.close();
                //在原文件内容中加入本次的备忘录内容(注意必须加日期)
                writeFile += date + "," + memo;
                //将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
                BufferedWriter bw = new BufferedWriter(new FileWriter(file));
                //写入字符串
                bw.write(writeFile);
                //关闭字符输出流
                bw.close();
                JOptionPane.showMessageDialog(this, "已保存");
            } catch (Exception e) {
                System.out.println("------" + e.getMessage() + "------");
            }
        }

    }
    这是一个java日历备忘录,现在只能添加当天的备忘录,请大家帮忙改写下,使他可以写随便选择的一天的备忘录,请大家帮忙啊