📄 mycalendar.java
字号:
/* * MyCalendar.java * 由于时间关系,部分代码未能加上注释,敬请谅解 * 或者可以加我QQ:229159701,大家可以做学习交流,我是个对JAVA有浓厚兴趣的人 * 希望我们能够成为学习上和生活上的好朋友 * * 程序里面每10秒对备忘录做一次检查,备忘录保存路径为d:/Calendar_Memo/Memo.BOX * 保存时未对内容加密,原本是打算采用数据库保存,但由于时间关系没有实现 * E-mail:h20020654@126.com * Created on 2008年5月21日, 下午2:08 */package calendar;import java.awt.Color;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import javax.swing.JOptionPane;import javax.swing.JSpinner;import javax.swing.JTable;import javax.swing.ListSelectionModel;import javax.swing.UIManager;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;import javax.swing.table.AbstractTableModel;import javax.swing.table.DefaultTableModel;/** * * @author 啊正 */public class MyCalendar extends javax.swing.JFrame implements Runnable { 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(); /** Creates new form MyCalendar */ public MyCalendar() { initComponents(); finalToday = sdfDate.format(now); setTable(); setDate(); updateTable(); new Thread(this).start(); } public void setTable() { //设置此表是否始终大到足以填充封闭视口的高度 tabDays.setFillsViewportHeight(true); //返回此 JTable 所使用的 tableHeader 并设置其背景颜色为浅灰色 tabDays.getTableHeader().setBackground(Color.lightGray); //设置此表是否允许同时存在行选择和列选择 tabDays.setCellSelectionEnabled(true); //将表的选择模式设置为只允许单个选择 tabDays.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); } public void setDate() { //使用默认时区和语言环境获得一个日历 calendar = Calendar.getInstance(); //更改显示 SpinnerModel 当前值的 JComponent,这里为JSpinner,其模型为 SpinnerNumberModel 的 JSpinner 编辑器,初始值为0000 spYear.setEditor(new JSpinner.NumberEditor(spYear, "0000")); //设置spYear的当前值为当前年年份 spYear.setValue(calendar.get(Calendar.YEAR)); //添加侦听器(每次模型更改时) spYear.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent arg0) { //当前具体日期(日子) int day = calendar.get(Calendar.DAY_OF_MONTH); //设置月份 calendar.set(Calendar.DAY_OF_MONTH, 1); //设置日历年份为spYear中选择的数值 calendar.set(Calendar.YEAR, ((Integer) spYear.getValue()).intValue()); //得到某年某月的日子的最大值 int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); //判断当前日子和选择某年某月后的日子大小情况 calendar.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day); //更新表格显示 updateTable(); } }); //设置cboMonths的当前值为当前月份 cboMonths.setSelectedIndex(calendar.get(Calendar.MONTH)); //添加侦听器(每次点击时) cboMonths.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { int day = calendar.get(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, 1); //设置日历月份为cboMonths中选择的数值 calendar.set(Calendar.MONTH, cboMonths.getSelectedIndex()); int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day); updateTable(); } }); } public void updateTable() { final String[] week = {"日", "一", "二", "三", "四", "五", "六" }; AbstractTableModel tableModel = new DefaultTableModel() { @Override public int getRowCount() { return 6; } @Override public int getColumnCount() { return 7; } @Override public String getColumnName(int column) { return week[column]; } @Override public Object getValueAt(int row, int column) { Calendar calendar = (Calendar) MyCalendar.this.calendar.clone(); calendar.set(Calendar.DAY_OF_MONTH, 1); int dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); int moreDayCount = calendar.get(Calendar.DAY_OF_WEEK) - 1; int index = row * 7 + column; int dayIndex = index - moreDayCount + 1; if (index < moreDayCount || dayIndex > dayCount) { return null; } else { return new Integer(dayIndex); } } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { System.out.println("------" + (rowIndex + 1) + "行" + (columnIndex + 1) + "列------"); return false; } }; if (tabDays == null) { tabDays = new JTable(); } tableModel.fireTableDataChanged(); tabDays.setModel(tableModel); int day = calendar.get(Calendar.DAY_OF_MONTH); for (int i = 0; i < tabDays.getRowCount(); i++) { for (int j = 0; j < tabDays.getColumnCount(); j++) { if (tabDays.getValueAt(i, j) != null && tabDays.getValueAt(i, j).toString().equals(day + "")) { tabDays.setRowSelectionInterval(i, i); tabDays.setColumnSelectionInterval(j, j); } } } if (((calendar.get(Calendar.MONTH) + 1) + "").length() == 1) { today = calendar.get(Calendar.YEAR) + "-" + 0 + (calendar.get(Calendar.MONTH) + 1) + "-" + calendar.get(Calendar.DAY_OF_MONTH); } else { today = calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" + calendar.get(Calendar.DAY_OF_MONTH); } new CheckMemo(today).start(); setLunar(); } public void run() { while (true) { Date nowTime = new Date(); SimpleDateFormat sdfTime = new SimpleDateFormat("HH点mm分ss秒"); labTime.setText(sdfTime.format(nowTime)); if (count == 10) { new CheckMemo(today); } try { Thread.sleep(1000); if (count == 10) { count = 0; } else { count++; } } catch (Exception e) { } } } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { pm = new javax.swing.JPopupMenu(); miWriteDayMemo = new javax.swing.JMenuItem(); contentPane = new javax.swing.JPanel(); labYear = new javax.swing.JLabel(); spYear = new javax.swing.JSpinner(); cboMonths = new javax.swing.JComboBox(); spTab = new javax.swing.JScrollPane(); tabDays = new javax.swing.JTable(); labCount = new javax.swing.JLabel(); labAllCount = new javax.swing.JLabel(); labTime = new javax.swing.JLabel(); panLunar = new javax.swing.JPanel(); labLunar = new javax.swing.JLabel(); mb = new javax.swing.JMenuBar(); mMemo = new javax.swing.JMenu(); miThatDayMemo = new javax.swing.JMenuItem(); miAllMemo = new javax.swing.JMenuItem(); sep = new javax.swing.JSeparator(); miWriteMemo = new javax.swing.JMenuItem(); mHelp = new javax.swing.JMenu(); miHelp = new javax.swing.JMenuItem(); miAbout = new javax.swing.JMenuItem(); miWriteDayMemo.setText("写该天备忘录"); miWriteDayMemo.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { miWriteDayMemoActionPerformed(evt); } }); pm.add(miWriteDayMemo); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("日历"); setIconImage(Toolkit.getDefaultToolkit().createImage(getClass().getResource("/calendar/today.png"))); setResizable(false); contentPane.setBackground(new java.awt.Color(204, 204, 255)); labYear.setText("年"); spYear.setEditor(new javax.swing.JSpinner.NumberEditor(spYear, "2008")); cboMonths.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月" })); spTab.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true)); tabDays.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED)); tabDays.setComponentPopupMenu(pm); tabDays.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null, null, null, null}, {null, null, null, null, null, null, null}, {null, null, null, null, null, null, null}, {null, null, null, null, null, null, null}, {null, null, null, null, null, null, null}, {null, null, null, null, null, null, null} }, new String [] { "日", "一", "二", "三", "四", "五", "六" } ) { boolean[] canEdit = new boolean [] { false, false, false, false, false, false, false }; public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } }); tabDays.setToolTipText("选中后右击可编写该天备忘录"); tabDays.setSelectionBackground(new java.awt.Color(0, 0, 255)); tabDays.getTableHeader().setResizingAllowed(false); tabDays.getTableHeader().setReorderingAllowed(false); tabDays.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { tabDaysMouseClicked(evt); } }); spTab.setViewportView(tabDays); labCount.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); labCount.setText("<html><div align='center'><font color='black'>该天备忘录:</font><font color='red'>0个</font></div></html>"); labCount.setToolTipText("双击我"); labCount.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { labCountMouseClicked(evt); } }); labAllCount.setForeground(new java.awt.Color(255, 0, 0)); labAllCount.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); labAllCount.setText("<html><div align='center'><font color='black'>全部备忘录:</font><font color='red'>0个</font></div></html>"); labAllCount.setToolTipText("双击我"); labAllCount.addMouseListener(new java.awt.event.MouseAdapter() {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -