演示图
演示图
Calendarapp.java
Calenda de package; import java.awt.borderlayout; import java.awt.color; import java.awt.flowlayout; import java.awt.font; import java.awt.gridlayout; import java.awt.event.actionevent; import java.awt.event. .ActionListener; Importer java.awt.event.mouseevent; import java.awt.event.mouseListener; import java.io.file; import java.text.simpledateformat; import java.util.calendar; import java.util.date; import; java.util.gregoriancalendar; import java.util.locale; Importer javax.swing.japplet; importer javax.swing.jbutton; importer javax.swing.jcombobox; importer javax.swing.jframe; importer javax.swing.jlabel; import javax.swing.jpanel; javax.swing.border.titledborder; classe publique CalendarApp étend JFrame {privé Calendarpanel Calendarpanel = new CalendarPanel (); JLABEL statique privé JlBlLearn = new JLabel ("开始准备记单词"); String private versionId = "欢迎使用版本 1.0.20150427"; JLABEL privé jlblversionId = new JLabel (versionId); JBUTTON JBUTTON JBTPRIOR = NOUVEAU JBUTTON ("←"); privé jbutton jbtNext = new JButton ("→"); privé jbutton jbtdiary = new JButton ("写日记"); privé jbutton jbtscanary = new JButton ("看日记"); Année d'intm statique privée; public void init () {année = calendarpanel.getyear (); calendarpanel.setbackground (color.white); / ** * 添加功能性按钮到日历面板下方 * / jpanel jpbuttons = new JPanel (new FlowLayout ()); // 设置按钮背景色为白色 JBTPrior.SetBackground (Color.White); JBTNEXT.SetBackground (Color.White); jbtdiary.setbackground (Color.white); JBTSCandiary.SetBackground (Color.White); / * * 给四个按钮添加鼠标事件 , 使其更加炫酷 * / // 一、后退按钮 JBTPrior.AddMouseListener (new MouseListener () {@Override public void MouseClicked (Mouseevent Arg0) {// Méthode générée automatique de TODO Stub} @Override public void muouseentered (Mouseevent Arg0) {// Todo Méthode générée automatiquement Stume JBTPrior.SetForeground (Color.Green);} @Override public Void Mouseexit (MouseEvent Arg0) {// TODO MOTHODE AUTO-GÉNÉRÉE MOUSEEXITED. Setforeground (Color.Black);} @Override public void Mousreprim (MouseEvent Arg0) {// TODO Method-généré par le Stume} @Override public Void MouseLelent (Mouseevent Arg0) {// TODO MOTHOD GÉNÉRÉ AUTO}}); // 二、前进按钮 JBTNEXT.AddMouseListener (new MouseListener () {@Override public void MouseClicked (Mouseevent Arg0) {// Todo Générat Auto-Generated Stub} @Override Public Void Mouseented (MouseEvent Arg0) {// To-Geneted Geneted Méthode Stume JBTNEXT.SETFORMAGE (Color.Green);} @Override Public Void MouseExit (Mouseevent Arg0) {// TODO Méthode générée automatique // TODO Méthode générée automatiquement Stub} @Override public void MouseLelent (MouseEvent Arg0) {// TODO Méthode générée automatique Stub}}); // 三、写日记按钮 JBTDIARY.AddMouseListener (new MouseListener () {@Override public void Mouseclicked (Mouseevent Arg0) {// Todo Générat Auto-Generated Stub} @Override Public Void Mouseentered (MouseEvent Arg0) {// Todo Auto- Méthode générée Stume jbtdiary.setForeground (Color.Green);} @Override public void MouseExit (Mouseevent Arg0) {// TODO Méthode générée automatique {// TODO Méthode générée automatiquement Stub} @Override public void MouseLelent (MouseEvent Arg0) {// TODO Method Method Stub}}); // 四、看日记按钮 JBTScanary.AddMouseListener (new MouseListener () {@Override public void MouseClicked (Mouseevent Arg0) {// TODO Méthode générée automatique Méthode générée Stume JBTSCandiary.setForeground (Color.Green); {// TODO Méthode générée automatiquement Stub} @Override public void MouseLelent (MouseEvent Arg0) {// TODO Method Method Stub}}); jpbuttons.add (JBTPrior); jpbuttons.add (jbtNext); jpbuttons.add (jbtdiary); jpbuttons.add (jbtscandiary); jpbuttons.setbackground (color.white); / ** * 添加日历主要组件 * / jpanel jpcalendar = new JPanel (new BorderLayout ()); jpcalendar.add (calendarpanel, borderlayout.center); jpcalendar.add (jpbuttons, borderlayout.south); / ** * 添加背单词模块 * / jpanel jPlearn = new JPanel (new FlowLayout ()); jPlearn.setborder (new TitledBorder ("开心背单词")); jPlearn.Add (JlblLearn); jPlearn.setbackground (Color.white); / ** * 添加版本号信息 * / jpanel jpversionid = new JPanel (new FlowLayout ()); FONT FONT = NOUVEAU FONT ("宋体", FONT.PLAIN, 4); jpversionId.setfont (FONT); jpversionid.add (jlblversionid); jpversionid.setbackground (color.white); / ** * 容器面板 , 合并记单词与版本号模块 * / jpanel jpbelow = new JPanel (new BorderLayout (2,1)); jpbelow.add (jPlearn, borderlayout.center); jpbelow.add (jpversionid, borderlayout.south); this.add (jpcalendar, borderlayout.center); this.add (jpbelow, borderlayout.south); this.setbackground (color.white); this.setSize (700, 500); this.setLocationRelativeto (null); this.setTitle ("多功能日历"); this.setDefaultCloseOperation (exit_on_close); this.setVisible (true); jbtscanary.addactionListener (new ActionListener () {@Override public void ActionPerformed (ActionEvent e) {new Thread (new Thread_Scandiary ()). start ();}}); jbtdiary.addactionListener (new ActionListener () {@Override public void ActionPerformed (ActionEvent e) {// 获取本地系统时间 SimpledateFormat df = new SimpledateFormat ("yyyy-mm-dd-hh-mm-ss"); // 设置日期格式 String time = df.format (new Date ()); JBTPrior.AdDactionListener (new ActionListener () {@Override public void ActionPerformed (ActionEvent E) {// TODO Méthode générée automatiquement Stub int Currenthonth = CalendarPanel.getyear (); ; JBTNEXT.ADDACTIONLISTERNEner (new ActionListener () {@Override public void ActionPerformed (ActionEvent E) {// TODO Méthode générée automatique année);} calendarpanel.setmonth ((CurrentMonth + 1)% 12);}}); } public static void main (string [] args) lève l'interruption de la méthode interrompue {// TODO Méthode générée automatique Stub swingutiles.invokelater (new Runnable () {@Override public void run () {// TODO Auto-généré par la méthode Stub New CalendarApp ( . }} Calendarpanel.java
/ ** * 本程序功能是进行日历主面板布局 * / Calenda de package; Importer java.awt.borderLayout; import java.awt.color; import java.awt.font; import java.awt.gridlayout; import java.awt.event.mousteevent; import java.awt.event.mouseListener; .DateFormAtsymbols; import java.text.simpledateFormat; import java.util.calendar; import java.util.gregoriancalendar; import java.util.locale; import javax.swing. *; import javax.swing.border.lineborder; classe publique Calendarpanel étend jpanel {/ ** * 声明数据变量 * / private static final SerialVersionUID = 1l; JLABEL privé jlblheader = new JLabel ("", jlabel.center); JLABEL privé [] jlblday = new JLabel [49]; calendrier calendrier privé = nouveau GregorianCalendar (); private int year0 = calendar.get (calendar.year); private int mois0 = calendar.get (calendar.month); private int day0 = calendar.get (calendar.day_of_month); Mois d'int privé; année int privée; Journée int privée; Jpanel privé jpdays = new JPanel (nouveau gridLayout (0,7)); FONT FONT1 = NOUVELLE FONT ("宋体", font.alic, 20); FONT FONT2 = NOUVEAU FONT ("宋体", Font.Bold, 26); FONT FONT3 = NOUVEAU FONT ("宋体", Font.Bold, 30); public CalendarPanel () {// 设置日历头部件以及日期标签的背景色为白色 JlblHeader.SetBackground (Color.White); jpdays.setbackground (Color.white); // 声明每个标签 pour (int i = 0; i <49; i ++) {jlblday [i] = new JLabel (); jlblday [i] .setborder (new lineborder (colore.light_gray, 1)); jlblday [i] .sethorizontalalignment (jLabel.Right); jlblday [i] .setVerticalAlignment (jLabel.top); } calendar = new GregorianCalendar (); mois = calendar.get (calendar.month); année = calendar.get (calendar.year); day = calendar.get (calendar.date); // 更新日历 UpdateCalendar (); showheader (); showdays (); // 添加到主面板 this.setLayout (new BorderLayout ()); this.add (jlblheader, borderlayout.north); this.add (jpdays, borderlayout.center); } private void showheader () {SimpledateFormat sdf = new SimpledateFormat ("mmmm yyyy", locale.china); String henter = sdf.format (calendar.getTime ()); jlblHeader.seTText (en-tête); JlblHeader.setForeground (Color.Blue); jlblHeader.setfont (font3); } private void showdayNames () {dateFormaSymbols dfs = new DateFormaSymbols (locale.china); String dayNames [] = dfs.getWeekdays (); pour (int i = 0; i <7; i ++) {jlblday [i] .setText (dayNames [i + 1]); jlblday [i] .setForeground (Color.Blue); jlblday [i] .sethorizontalalignment (jlabel.center); jlblday [i] .setfont (font2); jpdays.add (jlblday [i]); }} public void showdays () {jpdays.removeall (); showdayNames (); int startdayofMonth = calendar.get (calendar.day_of_week); Calendrier clonecalendar = (calendar) calendar.clone (); clonecalendar.add (calendar.date, -1); int waysInprecedingMonth = clonecalendar.getactualMaximum (calendar.day_of_month); for (int i = 0; i <startedayofmonth-1; i ++) {jlblday [i + 7] .setForeground (colore.light_gray); jlblday [i + 7] .sethorizontalalignment (jLabel.center); jlblday [i + 7] .setText (DaysInprecedingMonth-startingdayofmonth + 2 + i + ""); jlblday [i + 7] .setfont (font1); jpdays.add (jlblday [i + 7]); } int DaysIncurrentmonth = calendar.getactualMaximum (calendar.day_of_month); pour (int i = 1; i <= daySincurrentmonth; i ++) {if (i == day0 && an == anny0 && mois == Month0) {jlblday [i-2 + stardayofmonth + 7] .setForeground (Color.red); jlblday [i-2 + stardayofmonth + 7] .sethorizontalalignment (jLabel.center); jlblday [i-2 + startdayofmonth + 7] .setText (i + ""); jlblday [i-2 + startdayofmonth + 7] .setfont (font2); jpdays.add (jlblday [i-2 + stardayofmonth + 7]); } else {jlblday [i-2 + startdayofmonth + 7] .setForeground (color.darkgray); jlblday [i-2 + stardayofmonth + 7] .sethorizontalalignment (jLabel.center); jlblday [i-2 + startdayofmonth + 7] .setText (i + ""); jlblday [i-2 + startdayofmonth + 7] .setfont (FONT1); jpdays.add (jlblday [i-2 + stardayofmonth + 7]); }} int j = 1; for (int i = daysincurrentmonth-1 + startdayofmonth + 7; i% 7! = 0; i ++) {jlblday [i] .setForeground (colore.light_gray); jlblday [i] .sethorizontalalignment (jlabel.center); jlblday [i] .setText (j ++ + ""); jlblday [i] .setfont (font1); jpdays.add (jlblday [i]); } jpdays.repaint (); } public void updateCalendar () {calendar.set (calendar.year, année); Calendar.Set (calendrier.month, mois); calendar.set (calendar.date, 1); mois = calendar.get (calendar.month); année = calendar.get (calendar.year); day = calendar.get (calendar.date); } public int getMonth () {return mois; } public int getyear () {Retour Year; } public void setMonth (int mois) {this.month = mois; UpdateCalendar (); showheader (); showdays (); } public void seyear (int an) {this.year = an; UpdateCalendar (); showheader (); showdays (); }}Journal.java
/ ** * 本程序为日记类 * 最后修改日期为 2015-4-27 * / Calenda de package; import java.io.file; import java.io.fileInputStream; import java.io.fileoutputStream; import java.io.objectInputStream; import java.io.objectOutStream; import java.io.serializable; import javax.swing.joptionpane; Le journal de classe publique implémente Serializable {/ ** * 数据域 * / // 私有变量 Private String FileName; thème de chaîne privée; Contenu de chaîne privé; // 含参构造方法 Public Diary (String FileName, thème de chaîne, contenu de chaîne) {if (theme.length () == 0) {joptionpane.showMessageDialog (null, "无论心情如何 , 总得有个主题吧!") ; } else if (content.length () == 0) {jOptionPane.showMessageDialog (null, "把开心的不开心的都尽情写下吧!"); } else {file calendardiaryfile = new File ("c: / calendar / diary"); if (! calendardiaryfile.exists ()) {calendardiaryfile.mkDirs (); } this.filename = "c: / calendar / diary /" + filename + ". dat"; this.Theme = thème; this.Content = contenu; }} public void write () lève une exception {file file = new File (filename); FileoutputStream fos = new FileOutputStream (fichier); ObjectOutputStream oos = new ObjectOutputStream (fos); oos.writeObject (this); oos.close (); } Public Diary Read () lève une exception {fichier file = new File (nom de fichier); FileInputStream fis = new FileInputStream (fichier); ObjectInputStream oiS = new ObjectInputStream (FIS); Journal D = (Journal) ois.readObject (); oi.close (); retour d; } / ** * 变量 get () 方法 * @return * / public String gettheme () {return this.theme; } public String getContent () {return this.Content; } / ** * 变量 set () 方法 * @param commentaire * /}thread_keepdiary.java
/ ** * 备忘录线程 * 用于单击标签时可以存储日记 * 目前只考虑年月日时间点 , 不标记具体时间点 * / Calenda de package; import java.awt.borderlayout; import java.awt.event.actionEvent; import java.awt.event.actionListener; import java.io.file; import java.nio.file.files; importer javax.swing. *; classe publique thread_keepdiary étend JFrame implémente Runnable {private jframe jf = this; private jTextArea jta = new jTextArea (); JBUTTON JBUTTON JBTSAVE = NOUVEAU JBUTTON ("保存"); JLABEL privé jlblTitle = new JLabel ("主题"); privé jTextfield jtftitle = new JTextfield (16); ID de chaîne privée; public thread_keepdiary (String Time) {jpanel jptitle = new JPanel (); jPtiTle.SetLayout (new BorderLayout ()); jptitle.add (jlbltitle, borderlayout.west); jptitle.add (jtftitle, borderlayout.center); jta.setlinewrap (true); jta.setwrapstyleword (true); Jscrollpane jsp = new jscrollpane (JTA); jsp.sethorizontalscrollbarpolicy (jscrollpane.horizontal_scrollbar_never); this.id = time; jbtsave.addactionListener (new ActionListener () {@Override public void ActionPerformed (ActionEvent arg0) {// todo a auto-généré la méthode Stub string theme = jtftitle.getText (). d_today = nouveau journal (id, thème, contenu); ); this.setTitle ("备忘录" + id); this.add (jsp, borderlayout.center); this.add (jptitle, borderlayout.north); this.add (jbtsave, borderlayout.south); this.setSize (500 500); this.setLocationRelativeto (null); this.setDefaultCloseOperation (dissose_on_close); } @Override public void run () {this.setVisible (true); }}thread_mottosparkle.java
Calenda de package; import javax.swing.jlabel; classe publique thread_mottosparkle implémente Runnable {private jLabel jlbl; public thread_mottosparkle (jLabel jlbl) {this.jlbl = jlbl; } @Override public void run () {String content = jlbl.getText (); int l = content.length (); int index = 0; while (true) {jlbl.setText (contenu.substring (0, index)); essayez {thread.sleep (250); } catch (exception ex) {ex.printStackTrace (); } index ++; if (index == (l + 1)) index = 0; }}}thread_scanary.java
/ *** 查看日记线程编写 * / Calenda de package; import java.awt.borderlayout; import java.awt.color; import java.awt.font; import java.awt.event.actionEvent; import java.awt.event.actionListener; import java.io.file; import java.io .FileInputStream; Importer java.io.ObjectInputStream; import javax.swing. *; import javax.swing.table.defaultTableCellRenderer; import javax.swing.table.defaultTableModel; import javax.swing.table.jtableHeader; classe publique thread_scandiary étend JFrame implémente Runnable {/ ** * 声明变量区 * / private static final long SerialVersionUID = 1l; // 日历数据库存放路径 PRIME STRING PATH = "C: / Calendar / Diary"; // 日历总个数 日历总个数 日历总个数 日历总个数 日历总个数 日历总个数 private static int num; // 声明日历文件 fichier de fichier privé; Fichier privé [] Journal; // 声明 JTable 模型 JTable privé jTable; // 声明格言面板及标签及内容等 JPanel privé jpmotto = new JPanel (); JLABEL privé jlblmotto = new JLabel (); Font privé = nouvelle police ("宋体", font.italic, 20); String privé souhait = "唯有专注 , 才能让自己成功。"; // 增加弹出式菜单 2015-4-26 JPOPUPMENU JPOPUPMENU1 = NOUVEAU JPOPUPMENU (); // 声明菜单 声明菜单 声明菜单 声明菜单 声明菜单 声明菜单 声明菜单 声明菜单 JMENUITEM JMENSAN = NOUVEAU JMENUITEM ("查看"); JMenuItem privé jmidelete = new JMenuItem ("删除"); privé jMenuem jmicoMment = new JMenuItem ("评论"); @Override public void run () {// 尝试弹出式菜单增加子菜单 JMiscan.setForeground (Color.red); jmidelete.setForeground (Color.Red); jmicoMment.setForeground (Color.Red); jpopupmenu1.add (jmiscan); jpopupmenu1.addseparator (); jpopupmenu1.add (jmidelete); jpopupmenu1.addseparator (); jpopupmenu1.add (jmicoment); / ** * 智能获取文件列表 * / fichier = nouveau fichier (chemin); Diary = file.listFiles (); num = diary.length; String [] head = {"时间", "主题"}; Objet [] [] Diary = nouvel objet [num] [2]; for (int i = 0; i <num; i ++) {try {String time = diary [i] .getName (). remplaceFirst (". dat", ""); FileInputStream fis = new FileInputStream (Diary [i]); ObjectInputStream oiS = new ObjectInputStream (FIS); Journal D = (Journal) ois.readObject (); oi.close (); Thème de chaîne = d.getTheme (); Journal [i] [0] = temps; Journal [i] [1] = thème; } catch (exception ex) {ex.printStackTrace (); }} / ** * 格言面板取 * / jlblmotto.setText (Wish); jlblmotto.setfont (font); jlblmotto.setForeground (Color.Red); jpmotto.add (jlblmotto); jpmotto.setbackground (color.white); / ** * 日历列表面板区 * / final defaultTableModel TableModel = new defaultTableModel (Diary, Head); jTable = new JTable (tableModel); JTable.SetBackground (Color.white); JTable.SetRowHeight (30); jTable.setDoubleBuffered (false); jTable.SetComponentPopupMenu (jpopupmenu1); jTable.SetSelectionMode (ListSelectionModel.Single_Selection); DefaultTableCellRenderer tcr = new defaultTableCellRenderer (); // 设置 Table 内容居中 tcr.sethorizontalalignment (swingConstants.Center); // 这句和上句作用一样 jTable.setDefaulTrener (object.class, tcr); Jscrollpane jsp = new JScrollPane (jTable); / ** * 弹出式菜单事件监听器编写 * / // 查看菜单 JMiscan.AddActionListener (new ActionListener () {@Override public void ActionperFormEd (ActionEvent e) {if (jTable.getSelectedRow ()> = 0) {int index = jTable.getSelectedRow (); String FileName = "C: / Calendar / Diary /" + index] .getName (); OIS = New ObjectInputStream (Fis); "); Jtextfield jtftitle = new JTextfield (16); jpanel jptitle = new JPanel (); jptitle.setLayout (new BorderLayout ()); jptitle.add (jlbltitle, frontière )); .getContent ()); jf.setTitle ("日记" + Diary [index] .getName (). RemplaceFirst (". Dat", "")); jf.add (jsp, borderlayout.center); jf.add (jptitle, borderlayout.north); JF.SetSize (400 400); jf.setLocationRelativeTo (null); jf.setDefaultCloseOperation (dissose_on_close); jf.setVisible (true); } catch (exception ex) {ex.printStackTrace (); }} else {joptionpane.showMessageDialog (null, "请先选中一个日记!"); }}}); // 删除菜单 jmidelete.addactionListener (new ActionListener () {@Override public void ActionPerformed (ActionEvent e) {if (jTable.getSelectedRow ()> = 0) {int index = jTable.getSelectedRow (); string filename = "c: / Calendar / Diary / "+ Diary [index] .getName (); file file = new File (fileName); int option = joptionpane.showconfirmDialog (null," 你确定要删除日记 "+ diary [index] .getName () + "?"); else {}} else {joptionpane.showMessageDialog (null, "请先选中一个日记!");}}}); / ** * 主框架布局 * / this.add (jsp, borderlayout.center); this.add (jpmotto, borderlayout.south); this.setSize (600, 500); this.setDefaultCloseOperation (dissose_on_close); this.setLocationRelativeto (null); this.setTitle ("日记列表"); this.setVisible (true); nouveau thread (nouveau thread_mottosparkle (jlblmotto)). start (); }}thread_showenglish.java
Calenda de package; Importer java.awt.color; import java.awt.font; import java.io.bufferederader; import java.io.fileReader; import java.io.lineNumberReader; import java.security.seererandom; import java.util.random; import javax.swing.jlabel; classe publique thread_showenglish implémente Runnable {private static jLabel jlbl = new JLabel (); FONT FONT = NOUVEAU FONT ("��� ו", Font.Bold, 18); public thread_showenglish (jLabel jlbl) {this.jlbl = jlbl; Jlbl.setForeground (Color.magenta); Jlbl.setfont (FONT); } @Override public void run () {// TODO Méthode générée automatique Stub int count = 0; essayez {string file = "c: /calendar/learning/english_word.txt"; BufferedReader Input = new BufferedReader (new FileReader (fichier)); while (input.readline ()! = null) {count ++; } input.close (); int [] word = new int [count]; SecureRandom Random = new SecureRandom (); for (int i = 0; i <count; i ++) {word [i] = random.nextint (count); } int index = 0; Thread.Sleep (1000); while (true) {BufferedReader input1 = new BufferedReader (nouveau fileReader (fichier)); String contenu = ""; int line = 0; while ((content = input1.readline ())! = null) {if (line == word [index]) {jlbl.setText (contenu); } line ++; } if (index == count-1) index = 0; else index ++; Thread.Sleep (3500); }} catch (exception ex) {ex.printStackTrace (); }}}以上所述就是本文的全部内容了 , 希望大家能够喜欢。