演示图
演示图
CalendarApp.java
calnda de pacote; importar java.awt.borderlayout; importar java.awt.color; importar java.awt.flowlayout; importar java.awt.font; importar java.awt.gridlayout; importar java.awt.event.actionEvent; importar java.awt.evente .ActionListener; importar java.awt.event.mouseevent; importar java.awt.event.mouselistener; importar java.io.file; importar java.text.simpledEformat; importar java.util.calendar; importar java.util.date; java.util.gregoriaNcalendar; importar java.util.locale; importar javax.swing.japplet; importar javax.swing.jbutton; importar javax.swing.jcombobox; importar javax.swing.jframe; importar javax.swing.jlabel; importar javax.swing.jpanel; import javax.swing.swingutility; javax.swing.border.titledborder; classe pública calendarApp estende JFrame {private calendarPanel calendarPanel = new calendarPanel (); private estático jlabel jlbllearn = new jlabel ("开始准备记单词"); Private String VersionId = "欢迎使用版本 1.0.20150427"; private Jlabel jlblversionId = new Jlabel (VersionId); Private JButton JBTPRIOR = novo JButton ("←"); Private JButton JBTNext = New Jbutton ("→"); private jbutton jbtdiary = new jbutton ("写日记"); Private JButton JBTSCANDIARY = NEW JButton ("看日记"); private estático int ano; public void init () {ano = 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); / * * 给四个按钮添加鼠标事件 ior Stub} @Override public void MouseEntered (mouseevent arg0) {// TODO Método Gerado Auto-Gerado JBTPRIOR.SETFORMEGRIDO (COLOR.GREEN); Setforeground (color.black); // 二、前进按钮 jbtNext.addmouselistener (new MouseListener () {@Override public void mouseclicked (mouseevent arg0) {// TODO Método Auto-Gerado STUB} @Override vazio público Método Stub JBTNext.Setforeground (color.green); // ToDO Method Stub} @Override public void MousereledEd (mouseevent arg0) {// ToDO Method Stub}}); // 三、写日记按钮 jbtDiary.addmouselistener (new MouseListener () {@Override public void mouseclicked (mouseevent arg0) {// TODO Método Auto-Generado Método gerado Stub JBTDIARY.SETFORMEGRIDO (COLOR.GREEN); {// ToDO Method Stub} @Override public void mousereledEd (mouseevent arg0) {// TODO Method Auto-Gerated Stub}}); // 四、看日记按钮 jbtscandiary.addmouselistener (new mouseListener () {@Override public void mouseclicked (mouseevent arg0) {// Método auto-gerado automaticamente} @Override public void mouseErred (mouseventevent arg0) {// para automobilismo Método gerado Stub jbtscandiary.setforeground (color.green); {// ToDO Method Stub} @Override public void mousereledEd (mouseevent arg0) {// TODO Method Auto-Gerated 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 (NOVO TTITLEDBORDER ("开心背单词 开心背单词")); JPLEARN.ADD (JLBLELLENS); jplearn.setbackground (color.white); / ** * 添加版本号信息 */ jpanel jpversionId = new JPanel (new FlowLayout ()); Fonte da fonte = nova fonte ("宋体", 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); 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) {// 获取本地系统时间 SimpledEfformat df = new SimpleDateFormat ("AAAYYY-MM-DD-HH-MM-SS"); // 设置日期格式 String time = df.format (new Date ()); jbtPrior.addactionListener (new ActionListener () {@Override public void actionPormed (ActionEvent e) {// TODO Método Gerado Auto-Gerado Int CurrentMonth = calendarPanel.getMOMONH (); se (currentMonth == 0) {calendarpanel.setYear (); ; jbtNext.addactionListener (new ActionListener () {@Override public void ActionPerformed (ActionEvent e) {// TODO Método Auto-Gerado Stub int currentMonth = calendarPanel.getMOMONH (); se (currentMonth == 11) {calendarPanel.Setyearear ano); } public static void main (string [] args) lança interruptedException {// TODO Method Auto-Gerated Stub Swingutilities.invokelater (new Runnable () {@Override public void run () {// TODO Auto-Generated Method Stub New CalendarApp ( ) .init (); }} Calendarpanel.java
/** * 本程序功能是进行日历主面板布局 */calnda de pacote; importar java.awt.borderlayout; importar java.awt.color; importar java.awt.font; importar java.awt.gridlayout; importar java.awt.event.mousevent; importar java.awt.event.mouseListener; importar java.tevente; .DateFormatsymbols; importar java.text.simpledEformat; importar java.util.calendar; importar java.util.gregorianCalendar; importar java.util.locale; importar javax.swing.*; importar javax.swing.border.lineborder; classe pública CalendarPanel estende JPanel { / ** * 声明数据变量 * / private estático final serialversionuid = 1L; Private Jlabel JlBLHEADER = new Jlabel ("", jlabel.center); private Jlabel [] Jlblday = New Jlabel [49]; Calendário do calendário privado = New GregoriaCalendar (); private int ano 0 = calendário.get (calendário.year); private int mês 0 = calendário.get (calendar.month); private int Day0 = calendar.get (calendar.day_of_month); Mês privado int; Ano privado int; Dia Int Privado; JPanel privado jpdays = new JPanel (New GridLayout (0,7)); Font font1 = nova fonte ("宋体", font.italic, 20); Font font2 = new font ("宋体", font.bold, 26); Font font3 = new font ("宋体", font.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 (new lineborder (color.light_gray, 1)); Jlblday [i] .SethorizontalAlignment (Jlabel.right); jlblday [i] .SetverticalInel (Jlabel.top); } calendário = new Gregoriancalendar (); mês = calendar.get (calendar.month); ano = calendário.get (calendário.year); dia = calendário.get (calendário.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", loce.china); Cabeçalho da String = sdf.format (calendar.gettime ()); jlblheader.settext (cabeçalho); jlblheader.setforeground (color.blue); jlblheader.setFont (font3); } private void showDayNames () {dateFormatsymbols dfs = new DateFormatsymbols (Locale.china); String DayNames [] = dfs.getweekdays (); for (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); Calendário clonecalendar = (calendário) calendário.clone (); CLONECALENDAR.ADD (CALENDAR.DATE, -1); int DaysInprecedingMONTH = CLONECALENDAR.GETACTUALMAXIMUM (CALENDAR.DAY_OF_MONTH); para (int i = 0; i <StartDayOfMONTH-1; i ++) {Jlblday [i+7] .SetForeRound (color.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 DaysincurrentOnth = calendar.getActualMaximum (calendar.day_of_month); para (int i = 1; i <= diasincurrentmonth; i ++) {if (i == Day0 && ano == ano0 && me mês == Month0) {jlblday [i-2+StartingDayofmonth+7] .setforeground (color.red); JLBLAY [I-2+StartyDayofmonth+7] .SethorizontalAlignment (Jlabel.Center); jlblday [i-2+iniciando diafmonth+7] .settext (i+""); jlblday [i-2+StartyDayofmonth+7] .setFont (Font2); jpdays.add (jlblday [i-2+startyofmonth+7]); } else {jlblday [i-2+StartDayOfmonth+7] .Setforeground (color.Darkgray); Jlblday [i-2+StartyDayofmonth+7] .SethorizontalAlignment (Jlabel.Center); jlblday [i-2+iniciando diafmonth+7] .settext (i+""); jlblday [i-2+StartyDayofmonth+7] .setFont (Font1); jpdays.add (jlblday [i-2+startyofmonth+7]); }} int j = 1; para (int i = DaysincurrentMONTH-1+STEINDDEDOMEFONTH+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, ano); calendário.set (calendário.month, mês); calendário.set (calendário.date, 1); mês = calendar.get (calendar.month); ano = calendário.get (calendário.year); dia = calendário.get (calendário.date); } public int getMonth () {retorno mês; } public int getYear () {retorno ano; } public void setMonth (int mês) {this.month = mês; updateCalendar (); ShowHeader (); showdays (); } public void Setyear (int ano) {this.year = ano; updateCalendar (); ShowHeader (); showdays (); }}Diário.java
/** * 本程序为日记类 * 最后修改日期为 2015-4-27 */calnda de pacote; importar java.io.file; importar java.io.fileInputStream; importar java.io.fileOutputStream; importar java.io.objectInputStream; importar java.io.objectoutStream; importar java.io.Serializable; importar javax.swing.JOptionPane; A classe pública Diário implementa serializável { /** * 数据域 * /// 私有变量 nome do arquivo de string privado; tema privado de string; conteúdo privado de string; // 含参构造方法 Diário público (nome do arquivo da string, tema da string, conteúdo da string) {if (tema.length () == 0) {joptionpane.showMessagedialog (null, "无论心情如何 , 总得有个主题吧!") ; } else if (Content.Length () == 0) {JoptionPane.ShowMessAgedialog (null, "把开心的不开心的都尽情写下吧!"); } else {arquivo calendardaryfile = novo arquivo ("c:/calendário/diário"); if (! calendardaryfile.exists ()) {calendardariarfile.mkdirs (); } this.filename = "c:/calendário/diário/"+nome do arquivo+". dat"; this.theme = tema; this.content = content; }} public void write () lança exceção {arquivo file = new arquivo (nome do arquivo); FileOutputStream fos = new FileOutputStream (FILE); ObjectOutputStream ooS = new ObjectOutputStream (Fos); OOS.WriteObject (this); OOS.Close (); } public diery read () lança exceção {arquivo file = novo arquivo (nome do arquivo); FileInputStream fis = new FileInputStream (File); ObjectInputStream ois = new ObjectInputStream (fis); Diário d = (diário) ois.readObject (); OIS.Close (); retornar d; } / ** * 变量 get () 方法 * @return * / public string getTheme () {return this.theme; } public string getContent () {return this.content; } /** * 变量 Set () 方法 * @param Comment * /}thread_keepdiary.java
/** * 备忘录线程 * 用于单击标签时可以存储日记 * 目前只考虑年月日时间点 , 不标记具体时间点 */calnda de pacote; importar java.awt.borderlayout; importar java.awt.event.actionEvent; importar java.awt.event.actionListener; importar java.io.file; importar java.nio.file.files; importar javax.swing.*; classe pública thread_keepdiary estende jframe implementa Runnable {private jframe jf = this; Private JTexTarea JTA = New JTexTarea (); private JButton JBTSAVE = novo JButton ("保存"); private Jlabel jlbltitle = new jlabel ("主题"); Private JTextfield Jtftitle = New JTextfield (16); ID de string privado; 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 = novo JScrollPane (JTA); jsp.SethorizontalsCrollBarPolicy (jscrollpane.horizontal_scrollbar_never); this.id = time; jbtSave.addactionListener (new ActionListener () {@Override public void ActionPerformed (ActionEvent Arg0) {// TODO Método Geral Gerado Stub String tema = jtftitle.getText (). d_today = novo diário (tema, conteúdo); ); 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 (descarte_on_close); } @Override public void run () {this.setvisible (true); }}thread_mottosparkle.java
calnda de pacote; importar javax.swing.jlabel; classe pública 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)); tente {thread.sleep (250); } catch (Exceção ex) {ex.PrintStackTrace (); } index ++; if (index == (l+1)) ÍNDICE = 0; }}}Thread_scandiary.java
/*** 查看日记线程编写*/calnda de pacote; importar java.awt.borderlayout; importar java.awt.color; importar java.awt.font; importar java.awt.event.actionEvent; importar java.awt.event.actionListener; importar java.io.file; .FileInputStream; importar java.io.ObjectInputStream; importar javax.swing.*; importar javax.swing.table.defaultTableCellRenderer; importar javax.swing.table.defaultTableModel; importar javax.swing.table.jtableheader; classe pública thread_scandiary estende o jframe implementa Runnable { / ** * 声明变量区 * / private estático final serialversionuid = 1L; // 日历数据库存放路径 Private String Path = "c:/calendário/diário"; // 日历总个数 estático privado int num; // 声明日历文件 arquivo de arquivo privado; Diário de arquivo privado []; // 声明 jTable 模型 privado jTable jTable; // 声明格言面板及标签及内容等 Private JPanel JpMotto = new JPanel (); Private Jlabel Jlblmotto = New Jlabel (); fonte privada Fonte = nova fonte ("宋体", font.italic, 20); Private String Wish = "唯有专注 , 才能让自己成功。"; // 增加弹出式菜单 2015-4-26 Private JPOPUPMENU JPOPUPMENU1 = new JPOPUPMENU (); // 声明菜单 private jmenuitem jmiscan = new jmenuitem ("查看"); private jmenuitem jmidelete = new jmenuitem ("删除"); private 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); / ** * 智能获取文件列表 */ arquivo = novo arquivo (caminho); Diário = file.listfiles (); num = diário.Length; String [] Head = {"时间", "主题"}; Objeto [] [] diário = novo objeto [num] [2]; para (int i = 0; i <num; i ++) {tente {string time = diário [i] .getName (). substituirfirst (". dat", ""); FileInputStream fis = new FileInputStream (diário [i]); ObjectInputStream ois = new ObjectInputStream (fis); Diário d = (diário) ois.readObject (); OIS.Close (); Tema da string = d.getTheme (); diário [i] [0] = tempo; diário [i] [1] = tema; } catch (Exceção ex) {ex.PrintStackTrace (); }} / ** * 格言面板取 * / jlblmotto.settext (wish); jlblmotto.setFont (Font); jlblmotto.setforeground (color.red); jpmotto.add (jlblmotto); jpmotto.setbackground (color.white); / ** * 日历列表面板区 */ Final DefaultTableModel theblemodel = new DefaultTableModel (diário, cabeça); jtable = new jTable (Tablemodel); jtable.setBackground (color.white); jtable.setRowHeight (30); jtable.setDoubleBuffered (falso); jtable.setComponentPopupMenu (jpopupMenu1); jtable.setSelectionMode (ListSelectionModel.Single_Selection); DefaultTableCellRenderer tcr = new DefaultTableCellRenderer (); // Tabela 内容居中 tcr.SethorizontalAlignment (swingconstants.center); // 这句和上句作用一样 jtable.setDefaulTrendender (object.class, tcr); JscrollPane jsp = novo jscrollPane (jtable); /** * 弹出式菜单事件监听器编写 */// 查看菜单 jmiscan.addactionListener (new ActionListener () {@Override public void ActionPerformed (ActionEvent E) {if (jtable.getSelectedRow ()> = 0) {int index = jtable.getSelectRow (); OIS = novo ObjectInTream (FIS); "); Jtextfield Jtftitle = new JTextfield (16); JPanel Jptitle = New Jpanel (); Jptitle.setLayout (new BorderLayout ()); ); .getContent ()); jf.setTitle ("日记"+diário [índice] .getName (). substituirfirst (". dat", "")); jf.add (jsp, borderlayout.center); jf.add (jptitle, borderlayout.north); JF.SetSize (400.400); jf.setLocationRelativeTo (NULL); jf.setDefaultCloseoperation (dispede_on_close); jf.setVisible (true); } catch (Exceção 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: /Calendário/diário/"+diário [index] .getName (); arquivo file = new File (nome do arquivo); int option = joptionpane.showconfirmdialog (null," 你确定要删除日记 "+diário [index] .getName () +"?"); else {}} else {JoptionPane.showMessagedialog (null, "请先选中一个日记!"); / ** * 主框架布局 */ this.add (jsp, borderlayout.center); this.add (jpmotto, borderlayout.south); this.SetSize (600, 500); this.setDefaultCloseoperation (descarte_on_close); this.setLocationRelativeTo (NULL); this.setTitle ("日记列表"); this.setVisible (true); novo thread (new Thread_mottosParkle (jlblmotto)). start (); }}thread_showenglish.java
calnda de pacote; importar java.awt.color; importar java.awt.font; importar java.io.bufferedReader; importar java.io.fileReader; importar java.io.linenumberReader; import java.security.securerAndom; importar java.util.random; importar javax.swing.jlabel; classe pública thread_showenglish implementa runnable {private estático jlabel jlbl = new jlabel (); Fonte Fonte = New Font ("��� ו", Font.Bold, 18); public thread_showenglish (jlabel jlbl) {this.jlbl = jlbl; jlbl.setforeground (color.magenta); jlbl.setFont (fonte); } @Override public void run () {// TODO Method Auto-Gerated Stub int conting = 0; tente {string file = "c: /calendar/learning/english_word.txt"; BufferEredReader input = new BufferredReader (new FileReader (arquivo)); 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 (contagem); } int index = 0; Thread.sleep (1000); while (true) {bufferredader input1 = new BufferredReader (new FileReader (arquivo)); String Content = ""; int line = 0; while ((content = input1.readline ())! = null) {if (line == word [index]) {jlbl.settext (content); } linha ++; } if (index == count-1) índice = 0; else index ++; Thread.sleep (3500); }} catch (Exceção ex) {ex.PrintStackTrace (); }}}以上所述就是本文的全部内容了 , 希望大家能够喜欢。