演示图
演示图
Calendarapp.java
paquete calenda; import java.awt.bordayout; 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; import java.awt.event.Mousevent; import java.awt.event.MousElistener; import java.io.file; import java.text.simpledateFormat; import java.util.calendar; import java.util.date; importar; importación java.util.gregoriancalendar; import java.util.locale; import javax.swing.japplet; import javax.swing.jbutton; import javax.swing.jcomboBox; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; import javax.swing.swingutilidades; importar; importación; javax.swing.border.titledborder; Public Class CalendarApp extiende Jframe {Calendarpanel privado Calendarpanel = new CalendarPanel (); static private jlabel jlbllearn = new JLabel ("开始准备记单词"); String private versionId = "欢迎使用版本 1.0.20150427"; privado jlabel jlblversionId = new JLabel (versionId); privado jbutton jbtprior = new JButton ("←"); private jButton JBtNext = new JButton ("→"); privado jbutton jbtdiary = new JButton ("写日记"); privado jButton JBTScandiary = new JButton ("看日记"); Private static int año; public void init () {año = 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étodo Generado automático de TODO stub} @Override public void Mouseentered (MouseEvent Arg0) {// TODO Método Generado automático stub jbtprior.setForeGround (color.green); setforeground (color.black); // 二、前进按钮 jbtnext.addMouseListener (new MouseListener () {@Override public void MouseClicked (MouseEvent Arg0) {// TODO Método Generado automático} @Override public Void Mouseentered (MouseEvent Arg0) {// TODODO AUDO AUTO GENERADO GENERADO GENERADO AUTO GENERADO método stub jbtNext.setForeGround (color.green); // TODO Auto Generado Método STUB} @Override public void MouserElEded (MouseEvent Arg0) {// TODO STUB AUTO GENERADO}}); // 三、写日记按钮 jbtdiary.addMouseListener (new MouseListener () {@Override public void MouseClicked (MouseEvent Arg0) {// TODO Método generado automático} @Override public Void Mouseentered (MouseEvent Arg0) {// TODO Auto-- método generado stub jbtdiary.setforeground (color.green); {// TODO Método Generado automático} @Override public void MouserelEmised (MouseEvent Arg0) {// TODO Auto Generated Method Stub}}); // 四、看日记按钮 JBtScandiary.addMouseListener (new MouseListener () {@Override public void MouseClicked (MouseEvent Arg0) {// TODO Auto Generado Stub} @Override public void Mouseentered (mouseEvent Arg0) {// todo Auto-- Método generado JBTScandiary.SetForeGround (color.green); {// TODO Método Generado automático} @Override public void MouserelEmised (MouseEvent Arg0) {// TODO Auto Generated 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 (nuevo TitledBorder ("开心背单词")); JPLearn.Add (jlbllearn); jplearn.setbackground (color.white); / ** * 添加版本号信息 */ JPanel JPVersionId = new JPanel (new FlowLayout ()); Fuente de fuente = nueva fuente ("宋体", font.plain, 4); jpversionId.setFont (fuente); 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 (nulo); this.settitle ("多功能日历"); this.setDefaultCloseOperation (EXIT_ON_CLOSE); this.setVisible (verdadero); JBTScandiary.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"); // 设置日期格式 Time de cadena = df.format (nueva fecha ()); jbtprior.addactionListener (new ActionListener () {@Override public void ActionPerformed (ActionEvent E) {// TODO Auto Generado Método Stub int CurrentMonth = CalendArPanel.getMonth (); if (currentMonth == 0) {calendarpanel.setyear (año) ; jBtNext.AdDActionListener (new ActionListener () {@Override public void ActionPerformed (ActionEvent E) {// TODO Método generado automático stub int año); } public static void main (string [] args) lanza interruptedException {// tODO método generado automático stub swingUtilidades.invokelater (new runnable () {@Override public void run () {// TODO Auto Método Generado New CalendarApp ( ) .init (); }} Calendarpanel.java
/** * 本程序功能是进行日历主面板布局 */paquete calenda; import java.awt.bordayout; import java.awt.color; import java.awt.font; import java.awt.gridLayout; import java.awt.event.MouseEvent; import java.awt.event.MouseSistener; import java.text .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; El calendarpanel de clase pública se extiende jpanel { / ** * 声明数据变量 * / private static final long serialversionUid = 1l; privado jlabel jlblheader = new JLabel ("", jlabel.center); privado jlabel [] jlblday = new Jlabel [49]; Calendario de calendario privado = nuevo Gregoriancalendar (); private int Year0 = calendar.get (calendar.year); private int mes0 = calendar.get (calendario.month); private int day0 = calendar.get (calendar.day_of_month); Mes privado int; Private Int Year; Private Int Day; Jpanel privado jpdays = nuevo JPanel (nuevo GridLayout (0,7)); Fuente Font1 = nueva fuente ("宋体", Font.italic, 20); Fuente font2 = nueva fuente ("宋体", font.bold, 26); Fuente font3 = nueva fuente ("宋体", fuente. Bold, 30); public calendarpanel () {// 设置日历头部件以及日期标签的背景色为白色 jlblheader.setbackground (color.white); jpdays.setbackground (color.white); // 声明每个标签 para (int i = 0; i <49; i ++) {jlblday [i] = new JLabel (); jlblday [i] .setBorder (nuevo LineBorder (color.light_gray, 1)); jlblday [i] .Sethorizontalalignment (jlabel.right); jlblday [i] .SetVerticalAlignment (jlabel.top); } calendario = new Gregoriancalendar (); mes = calendario.get (calendario.month); año = calendario.get (calendario.Year); día = calendario.get (calendario.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 aa yyyy", locale.china); Encabezado de cadena = sdf.format (calendar.gettime ()); jlblheader.settext (encabezado); jlblheader.setForeGround (color.blue); jlblheader.setFont (font3); } private void showdaynames () {dateFormatSymbols dfs = new DateFormatSymbols (locale.china); String DayNames [] = dfs.getweekdays (); para (int i = 0; i <7; i ++) {jlblday [i] .settext (daynames [i+1]); jlblday [i] .setForefround (color.blue); Jlblday [i] .SethorizontalAlignment (jlabel.center); jlblday [i] .setFont (font2); jpdays.add (jlblday [i]); }} public void showdays () {jpdays.removeall (); showdaynames (); int startingdayofmonth = calendar.get (calendar.day_of_week); Calendario clonecalendar = (calendario) calendario.clone (); clonecalendar.add (calendario.date, -1); int daysInPrecedingMonth = clonecalendar.getActualMaximum (calendar.day_of_month); para (int i = 0; i <startingdayofmonth-1; i ++) {jlblday [i+7] .setForeGround (color.light_gray); jlblday [i+7] .SethorizontalAlignment (jlabel.center); jlblday [i+7] .settext (días que se prevé que se aceleren el día de Month+2+i+""); jlblday [i+7] .setFont (font1); jpdays.add (jlblday [i+7]); } int daysIncrentMonth = calendar.getActualMaximum (calendar.day_of_month); for (int i = 1; i <= daysIncrentMonth; i ++) {if (i == day0 && año == Year0 && mes == mes0) {jlblday [i-2+startingdayofmonth+7] .setForeGround (color.red); JLBLDay [I-2+StartingdayOf Monthmonth+7] .SethorizontalAlignment (jlabel.center); Jlblday [I-2+StartingdayOfMonth+7] .settext (i+""); JLBLDAY [I-2+StartingdayOfMonth+7] .setFont (font2); jpdays.add (jlblday [i-2+startingdayofmonth+7]); } else {jlblday [i-2+startingdayofmonth+7] .setForeGround (color.DarkGray); JLBLDay [I-2+StartingdayOf Monthmonth+7] .SethorizontalAlignment (jlabel.center); Jlblday [I-2+StartingdayOfMonth+7] .settext (i+""); JlBlday [I-2+StartingdayOf MONTH+7] .setFont (Font1); jpdays.add (jlblday [i-2+startingdayofmonth+7]); }} int j = 1; para (int i = daysIncrentMonth-1+startingdayofmonth+7; i%7! = 0; i ++) {jlblday [i] .setForeGround (color.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, año); calendario.set (calendario. Month, mes); calendario.set (calendario.date, 1); mes = calendario.get (calendario.month); año = calendario.get (calendario.Year); día = calendario.get (calendario.date); } public int getMonth () {Mes de retorno; } public int getyear () {retorno año; } public void setMonth (int mes) {this.month = mes; updateCalendar (); showHeader (); showdays (); } public void setyear (int año) {this.year = año; updateCalendar (); showHeader (); showdays (); }}Diario.java
/** * 本程序为日记类 * 最后修改日期为 2015-4-27 */paquete calenda; import java.io.file; import java.io.fileInputStream; import java.io.fileOutputStream; import java.io.objectInputStream; import java.io.ObjectOutputStream; import java.io.serializable; import javax.swing.JOptionPane; Public Class Diary implementa serializable { /** * 数据域 * /// 私有变量 Nombre de archivo de cadena privada; tema de cadena privada; Contenido de cadena privada; // 含参构造方法 Public Diary (String FileName, String Theme, String Content) {if (thema.length () == 0) {joptionPane.ShowMessEdialog (nulo, "无论心情如何 无论心情如何 总得有个主题吧!") ; } else if (content.length () == 0) {joptionPane.showMessEdialog (nulo, "把开心的不开心的都尽情写下吧!"); } else {archivo calendardiarfile = nuevo archivo ("c:/calendar/diary"); if (! CalendARDIARYFILE.Exists ()) {calendARDIARYFILE.MKDIRS (); } this.fileName = "c:/calendar/diario/"+nombre de archivo+". dat"; this.theme = tema; this.content = content; }} public void Write () lanza excepción {archivo archivo = nuevo archivo (nombre de archivo); FileOutputStream fos = new FileOutputStream (archivo); ObjectOutputStream oos = new ObjectOutputStream (FOS); oos.writeObject (esto); oos.close (); } public Diary Read () lanza excepción {archivo archivo = nuevo archivo (nombre de archivo); FileInputStream fis = new FileInputStream (archivo); ObjectInputStream OIS = new ObjectInputStream (FIS); Diario d = (diario) ois.readObject (); ois.close (); regresar D; } / ** * 变量 get () 方法 * @return * / public string getTheme () {return this.theme; } public String getContent () {return this.content; } /** * 变量 set () 方法 * @param comentario * /}Thread_keepdiary.java
/** * 备忘录线程 * 用于单击标签时可以存储日记 * 目前只考虑年月日时间点 , 不标记具体时间点 */paquete calenda; import java.awt.borderlout; import java.awt.event.actionEvent; import java.awt.event.actionListener; import java.io.file; import java.nio.file.files; import javax.swing.*; public class Thread_keepdiary extiende los implementos jframe runnables {private jframe jf = this; privado jtexTarea jta = new JTextArea (); privado jbutton jbtsave = new JButton ("保存"); privado jlabel jlbltitle = new JLabel ("主题"); privado jtextfield jtftitle = new JTextfield (16); ID de cadena privada; public Thread_keepdiary (String Time) {JPanel Jptitle = new JPanel (); jptitle.setLayout (nuevo borderLayout ()); jptitle.add (jlbltitle, borderLayout.west); jptitle.add (Jtftitle, borderLayout.center); JTA.SetLineWrap (verdadero); jta.setwrapStyleword (verdadero); 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 Método Generado automático stub String teme = jtftitle.gettext (). Trim (); String Content = JTA.GETTEXT (); Diary; d_today = nuevo diario (id, contenido); ); this.settitle ("备忘录"+id); this.Add (JSP, BorderLayout.Center); this.Add (Jptitle, BorderLayout.north); this.add (JBtSave, BorderLayout.South); this.setsize (500,500); this.setLocationRelativeto (nulo); this.setDefaultCloseOperation (disposición_on_close); } @Override public void run () {this.setVisible (true); }}Thread_mottosparkle.java
paquete calenda; import javax.swing.jlabel; public class Thread_mottosparkle implementa 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 (content.substring (0, index)); intente {thread.sleep (250); } catch (Exception Ex) {Ex.PrintStackTrace (); } índice ++; if (index == (l+1)) índice = 0; }}}thread_scandiary.java
/*** 查看日记线程编写*/paquete calenda; import java.awt.bordayout; import java.awt.color; import java.awt.font; import java.awt.event.actionEvent; import java.awt.event.actionListener; import java.io.file; import.io.io .FileInputStream; import java.io.objectInputStream; import javax.swing.*; import javax.swing.table.defaulttableCellrenderer; import javax.swing.table.defaulttableModel; import javax.swing.table.jtableheader; public class Thread_Scandiary extiende los implementos jframe runnables { / ** * 声明变量区 * / private static final long serialversionUid = 1l; // 日历数据库存放路径 Path de cadena privada = "c:/calendar/diario"; // 日历总个数 private static int num; // 声明日历文件 Archivo de archivo privado; archivo privado [] diario; // 声明 jtable 模型 private jtable jtable; // 声明格言面板及标签及内容等 Private JPanel JPMotto = new JPanel (); privado jlabel jlblmotto = new JLabel (); fuente privada fuente = nueva fuente ("宋体", fuente. Ititalic, 20); string private wish = "唯有专注 , 才能让自己成功。"; // 增加弹出式菜单 2015-4-26 JPOPUPMENU PRIVADO JPOPUPMENU1 = new JPopupMenu (); // 声明菜单 Private JMenuitem JMiscan = new JMenuitem ("查看"); privado jmenuitem jmidelete = new JMenuitem ("删除"); privado jmenuitem 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 (JMicomment); / ** * 智能获取文件列表 */ archivo = nuevo archivo (ruta); Diary = file.listfiles (); num = diar.length; String [] head = {"时间", "主题"}; Objeto [] [] diario = nuevo objeto [num] [2]; for (int i = 0; i <num; i ++) {try {string time = diary [i] .getName (). reemplazarFirst (". dat", ""); FileInputStream fis = new FileInputStream (diario [i]); ObjectInputStream OIS = new ObjectInputStream (FIS); Diario d = (diario) ois.readObject (); ois.close (); Tema de cadena = d.getTheme (); diario [i] [0] = tiempo; diario [i] [1] = tema; } catch (Exception Ex) {Ex.PrintStackTrace (); }} / ** * 格言面板取 * / jlblmotto.settext (wish); jlblmotto.setFont (fuente); jlblmotto.setForeGround (color.red); jpmotto.add (jlblMotto); jpmotto.setbackground (color.white); / ** * 日历列表面板区 */ final DefaultTableModel TableModel = new DefaultTableModel (diario, cabeza); JTable = nuevo JTable (Tablemodel); jtable.setbackground (color.white); JTable.SetRowHeight (30); jtable.setDoubleBuffered (falso); jtable.setComponentPopupMenu (jPopupMenu1); jtable.setselectionMode (listelectionModel.single_selection); DefaultTableCellRenderer tcr = new DefaultTableCellRenderer (); // 设置 Tabla 内容居中 TCR.SethorizontalAlignment (SwingConstants.center); // 这句和上句作用一样 jtable.setdefaultrenderer (objeto.class, tcr); JscrollPane jsp = new JScrollPane (JTable); /** * 弹出式菜单事件监听器编写 */// 查看菜单 jmiscan.addactionListener (new ActionListener () {@Override public Void ActionPerformed (ActionEvent E) {if (JTable.GetSelectedRow ()> = 0) {int index = jtable.getSelectionRow (); OIS = nuevo ObjectStream (FIS); "); JTextfield Jtftitle = new JTextfield (16); jpanel jptitle = new jPanel (); jptitle.setLayout (new BorderLayout ()); jptitle.add (jlbltitle, borderLayout.west); jptitle.add (jtftitle, borderlayout.center ); .getContent ()); jf.settitle ("日记"+diario [index] .getName (). reemplazarFirst (". dat", "")); JF.Add (JSP, BorderLayout.Center); JF.Add (Jptitle, BorderLayout.north); JF.SetSize (400,400); JF.SetLocationRelativeto (NULL); jf.setDefaultCloseOperation (disposición_on_close); JF.SetVisible (verdadero); } catch (Exception Ex) {Ex.PrintStackTrace (); }} else {joptionPane.ShowMessEdialog (nulo, "请先选中一个日记!"); }}}); // 删除菜单 jmidelete.AdDActionListener (new ActionListener () {@Override public Void ActionPerformed (ActionEvent E) {if (jtable.getSelectedRow ()> = 0) {int index = jtable.getSelectedrow (); string filename = "c: /Calendario/diary/"+diario [index] .getName (); archivo de archivo = nuevo archivo (filename); int option = joptionPane.showConfirmDialog (null," 你确定要删除日记 "+diario [index] .getName () +"?"); else {}} else {joptionPane.ShowMessEdialog (nulo, "请先选中一个日记!"); / ** * 主框架布局 */ this.add (jsp, borderLayout.center); this.add (JPMotto, BorderLayout.South); this.setsize (600, 500); this.setDefaultCloseOperation (disposición_on_close); this.setLocationRelativeto (nulo); this.settitle ("日记列表"); this.setVisible (verdadero); nuevo hilo (new Thread_MottosParkle (jlblMotto)). Start (); }}Thread_showenglish.java
paquete calenda; import java.awt.color; import java.awt.font; import java.io.bufferedReader; import java.io.filereader; import java.io.linenumberReader; import java.security.secureerandom; import java.util.random; import javax.swing.jlabel; public class Thread_showenglish implementa runnable {private static jlabel jlbl = new JLabel (); Fuente de fuente = nueva fuente ("��� igh", Font.bold, 18); public thread_showenglish (jlabel jlbl) {this.jlbl = jlbl; jlbl.setForeground (color.magenta); jlbl.setFont (fuente); } @Override public void run () {// TODO Auto Generado Método stub int count = 0; intente {string file = "c: /calendar/learning/english_word.txt"; BufferedReader input = new BufferedReader (new FileReader (archivo)); 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 (new FileReader (archivo)); String content = ""; int line = 0; while ((content = input1.readline ())! = null) {if (line == word [index]) {jlbl.settext (content); } línea ++; } if (index == count-1) índice = 0; el más índice ++; Thread.sleep (3500); }} capt (excepción ex) {ex.printstackTrace (); }}}以上所述就是本文的全部内容了 希望大家能够喜欢。 希望大家能够喜欢。