演示图
演示图
Calendarapp.java
패키지 캘린다; 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; import 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; 가져 오기 java.util.gregoriancalendar; import java.util.locale; import javax.swing.japplet; import javax.swing.jbutton; import javax.swing.jcombox; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jpanel; import javax.swing.swingutilities; 가져 오기; javax.swing.border.titredborder; Public Class CalendarApp은 Jframe {Private CalendarPanel CalendarPanel = New CalendarPanel (); 개인 정적 Jlabel JlblLearn = New Jlabel ( "开始准备记单词"); 개인 문자열 versionid = "id 1.0.20150427"; 개인 jlabel jlblversionid = new Jlabel (versionId); 개인 JBUTTON JBTPRIOR = NEW JBUTTON ( "←"); 개인 JBUTTON JBTNEXT = NEW JBUTTON ( "→"); 개인 JBUTTON JBTDIARY = NEW JBUTTON ( "写日记"); 개인 JBUTTON JBTSCANDIARY = NEW JBUTTON ( "看日记"); 개인 정적 Int 연도; public void init () {year = 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) {// todo 자동 생성 메소드 stub} @override public void mouseentered (mouseevent arg0) {// todo auto-reconeed method stub jbtprior.setforeground (color.green); setforeground (color.black)} @override public void mousepressed (mouseevent arg0) {// todo auto-kened method stub} @override public void mousereLeder (mouseevent arg0) {// todo auto-generated method stub}); // jbtnext.addmouselistener (new mouselistener () {@override public void mouseclicked (mouseevent arg0) {// todo auto-ato-reconderated method stub} @override public void mouseentered (mouseevent arg0) {// a auto-generated 메소드 jbtnext.setforeground (color.green)} @override public void mouseexited (mouseevent arg0) {// todo auto-regended method.setforeground (color.black); // todo 자동 생성 메소드 스터브} @override public void mouserEleled (mouseevent arg0) {// todo 자동 생성 메소드 stub}); // jbtdiary.addmouselistener (new mouselistener () {@override public void mouseclicked (mouseevent arg0) {// todo 자동 생성 메소드 stub} @override public void mouseentered (mouseevent arg0) {// todo auto- 생성 메소드 jbtdiary.setforeground (color.green)} @override public void mouseexited (mouseevent arg0) {// todo auto-regended method.setforeground (color.black); {// todo 자동 생성 메소드 스터브} @override public void mouserEleled (mouseevent arg0) {// todo 자동 생성 메소드 스텁}); // JBTSCANDIARY.ADDMOUSELISTERE (new MousElistener () {@override public void mouseclicked (mouseevent arg0) {// todo 자동 생성 메소드 stub} @override public void mouseentered (mouseevent arg0) {// todo auto- 생성 메소드 jbtscandiary.setforeground (color.green)} @override public void mouseexited (mouseevent arg0) {// todo auto-kenerated method jbtscandiary.setforeground (color.black); {// todo 자동 생성 메소드 스터브} @override public void mouserEleled (mouseevent arg0) {// todo 자동 생성 메소드 스텁}); 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 (새로운 제목의 보더 ( "开心背单词")); jplearn.add (jlbllearn); jplearn.setbackground (color.white); / ** * 添加版本号信息 */ jpanel jpversionid = new JPanel (new FlowLayout ()); font font = new Font ( "宋体", font.plain, 4); jpversionid.setfont (font); jpversionid.add (jlblversionid); jpversionid.setbackground (color.white); / ** * 容器面板 容器面板, 合并记单词与版本号模块 */ jpanel jpbelow = 새로운 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.set -Visible (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) {// 获取本地系统时间 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 auto-regenated method stub int currentmonth = calendarpanel.getmonth (); if (currentmonth == 0) {calendarpanel.setyear (Year). 연도-} calendarpanel. jbtnext.addactionListener (new ActionListener () {@override public void ActionPerformed (ActionEvent e) {// todo 자동 유래 메소드 Stub int currentmonth = calendarpanel.getmonth (); if (currentmonth == 11) {calendarpanel.setyear (+++. 연도;} Calarpanel. } public static void main (string [] args)은 중단 exception {// todo auto-auto-auto-kenated method stub swingutilities.invokelater (new runnable () {@override public void run () {// to auto-auto-void method stub new CalendarApp (new CalendarApp) ) .init (); 새 스레드 (new Thread_showEnglish (jlblLearn)); }} Calendarpanel.java
/** * 本程序功能是进行日历主面板布局 */패키지 캘린다; import java.awt.borderlayout; import java.awt.color; import java.awt.font; import java.awt.gridlayout; import java.awt.event.mouseevent; import java.awt.event.mouselistener; 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; 공개 클래스 CalendarPanel은 jpanel을 확장합니다. 개인 jlabel jlblheader = new Jlabel ( "", jlabel.center); 개인 jlabel [] jlblday = New Jlabel [49]; 개인 캘린더 캘린더 = New GregorianCalendar (); private int year0 = calendar.get (calendar.year); private int month0 = calendar.get (calendar.month); private int day0 = calendar.get (calendar.day_of_month); 개인 INT의 달; 개인 int 년; 개인 INT 데이; 개인 JPANEL JPDAYS = NEW JPANEL (New GridLayout (0,7)); font font1 = 새로운 글꼴 ( "宋体", font.italic, 20); font font2 = 새로운 글꼴 ( "宋体", font.bold, 26); font font3 = 새로운 글꼴 ( "宋体", font.bold, 30); public calendarpanel () {// 设置日历头部件以及日期标签的背景色为白色 jlblheader.setbackground (color.white); jpdays.setbackground (color.white); // (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] .setverticalalignment (jlabel.top); } calendar = new GregorianCalendar (); Month = Calendar.get (Calendar.month); 연도 = calendar.get (calendar.year); day = calendar.get (calendar.date); // 更新日历 updateCalendar (); showheader (); 쇼 데이 (); // 添加到主面板 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); 문자열 헤더 = sdf.format (calendar.gettime ()); jlblheader.settext (헤더); jlblheader.setforeground (color.blue); jlblheader.setfont (font3); } private void showdayNames () {dateformatsymbols dfs = 새로운 dateformatsymbols (locale.china); 문자열 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 statger startingdayofmonth = calendar.get (calendar.day_of_week); Calendar Clonecalendar = (Calendar) Calendar.clone (); clonecalendar.add (calendar.date, -1); int daysinprecedingmonth = clonecalendar.getActualMaximum (calendar.day_of_month); for (int i = 0; i <시작 dayofmonth-1; i ++) {jlblday [i+7] .setforeground (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 daysincurrentmonth = calendar.getActualMaximum (calendar.day_of_month); for (int i = 1; i <= daysincurrentmonth; i ++) {if (i == day0 && year == year0 && month == month0) {jlblday [i-2+statgetdayofmonth+7] .setforeground (color.red); JLBLDAY [I-2+STARTERING DAYOFMONTH+7] .SETHORIZONTALALIGNMENT (JLABEL.CENTER); jlblday [I-2+STARTINES OFFMONTH+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+STARTERING DAYOFMONTH+7] .SETHORIZONTALALIGNMENT (JLABEL.CENTER); jlblday [I-2+STARTINES OFFMONTH+7] .SETTEXT (i+""); JLBLDAY [I-2+STARTINGDAYOFMONTH+7] .SETFONT (FONT1); jpdays.add (jlblday [I-2+STARTINGDAYOFMONTH+7]); }} int j = 1; for (int i = daysincurrentth-1+STARTINESOFMONTH+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, year); Calendar.Set (Calendar.Month, Month); calendar.set (calendar.date, 1); Month = Calendar.get (Calendar.month); 연도 = calendar.get (calendar.year); day = calendar.get (calendar.date); } public int getmonth () {return month; } public int getyear () {return Year; } public void setMonth (int month) {this.month = month; UpdateCalendar (); showheader (); 쇼 데이 (); } public void setyear (int 년) {this.year = 년; UpdateCalendar (); showheader (); 쇼 데이 (); }}다이어리. 자바
/** * 本程序为日记类 * 最后修改日期为 2015-4-27 */패키지 캘린다; 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 Diary (문자열 파일 이름, 문자열 테마, 문자열 내용) {if (wame.length () == 0) {joptionpane.showmessagedialog (null, "无论心情如何, 总得有个主题吧!") ; } else if (content.length () == 0) {joptionpane.showmessagedialog (null, "把开心的不开心的都尽情写下吧!"); } else {file calendardiaryfile = 새 파일 ( "c :/calendar/diary"); if (! calendardiaryfile.exists ()) {calendardiaryfile.mkdirs (); } this.filename = "C :/Calendar/Diary/"+filename+". Dat"; this.theme = 테마; this.content = 내용; }} public void write ()는 예외 {file file = 새 파일 (filename); fileoutputStream fos = 새 FileOutputStream (file); ObjectOutputStream OOS = 새로운 ObjectOutputStream (FOS); oos.writeobject (this); oos.close (); } public diary read ()는 예외 {file file = new File (filename); fileInputStream fis = 새로운 fileInputStream (file); ObjectInputStream OIS = New ObjectInputStream (FIS); 일기 d = (일기) ois.readobject (); ois.close (); 반환 d; } / ** * * get () 方法 * @return * / public string getTheme () {return this.theme; } public String getContent () {return this.content; } /** * * set () 方法 * @param 댓글 * /}Thread_keepdiary.java
/** * 备忘录线程 * 用于单击标签时可以存储日记 * 目前只考虑年月日时间点 目前只考虑年月日时间点, 不标记具体时间点 */패키지 캘린다; import java.awt.borderlayout; import java.awt.event.actionevent; import java.awt.event.actionListener; import java.io.file; import java.nio.file.files; javax.swing을 가져옵니다.*; Public Class Thread_KeepDiary는 jframe 구현을 확장합니다. private jtextArea jta = 새로운 jtextArea (); 개인 JBUTTON JBTSAVE = NEW JBUTTON ( "保存"); 개인 jlabel jlbltitle = new Jlabel ( "主题"); Private Jtextfield jtftitle = New Jtextfield (16); 개인 문자열 ID; public thread_keepdiary (문자열 시간) {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 = 새로운 jscrollpane (jta); jsp.sethorizontalscrollbarpolicy (jscrollpane.horizontal_scrollbar_never); this.id = 시간; jbtsave.addactionListener (new ActionListener () {@override public void ActionPerformed (ActionEvent arg0) {// todo 자동 유래 메소드 스터브 문자열 테마 = jtftitle.getText (); String content = jta.getText (); Diary d_today = id, 테마, 내용) {d_today.write.showmessagedialog (null, jf.dispose); );}}}); 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 (dispose_on_close); } @override public void Run () {this.setVisible (true); }}Thread_mottosparkle.java
패키지 캘린다; import javax.swing.jlabel; 공개 클래스 Thread_Mottosparkle은 런닝 가능한 {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)); try {thread.sleep (250); } catch (예외) {ex.printstacktrace (); } index ++; if (index == (l+1)) index = 0; }}}Thread_scandiary.java
/***/*/패키지 캘린다; 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; 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는 jframe empless runnable { / ** * 声明变量区 * / private static final long serialversionuid = 1l; // 日历数据库存放路径 개인 문자열 경로 = "C :/Calendar/Diary"; // 日历总个数 개인 정적 int num; // 声明日历文件 개인 파일 파일; 개인 파일 [] 일기; // 声明 jtable 模型 개인 jtable jtable; // private jpanel jpmotto = new jpanel (); 개인 jlabel jlblmotto = new Jlabel (); 개인 글꼴 글꼴 = 새로운 글꼴 ( "宋体", font.italic, 20); 개인 문자열 소원 = "" ", 才能让自己成功。"; // 增加弹出式菜单 2015-4-26 Private JPOPUPMENU JPOPUPMENU1 = 새로운 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); / ** * 智能获取文件列表 */ file = 새 파일 (경로); 일기 = file.listfiles (); num = giary.length; 문자열 [] head = { "时间", "主题"}; 대상 [] [] 일기 = 새로운 객체 [num] [2]; for (int i = 0; i <num; i ++) {try {string time = diary [i] .getName (). replacefirst ( ". dat", ""); fileInputStream fis = 새로운 fileInputStream (일기 [i]); ObjectInputStream OIS = New ObjectInputStream (FIS); 일기 d = (일기) ois.readobject (); ois.close (); 문자열 테마 = d.getTheme (); 일기 [i] [0] = 시간; 일기 [i] [1] = 테마; } catch (예외) {ex.printstacktrace (); }} / ** * 格言面板取 * / jlblmotto.settext (소원); jlblmotto.setfont (font); jlblmotto.setforeground (color.red); jpmotto.add (jlblmotto); jpmotto.setbackground (color.white); / ** * 日历列表面板区 */ 최종 DefaultTableModel TableModel = 새로운 DefaultTableModel (일기, 헤드); jtable = new Jtable (Tablemodel); jtable.setbackground (color.white); jtable.setrowheight (30); jtable.setDoubleBuffered (false); jtable.setcomponentpopupmenu (jpopupmenu1); jtable.setSelectionMode (listSelectionModel.Single_Selection); DefaultTableCellrenderer tcr = 새로운 DefaultTableCellrenderer (); // 设置 设置 设置 tcr.sethorizontalalignment (swingconstants.center); // 这句和上句作用一样 jtable.setDefaultrenderer (Object.Class, tcr); jscrollpane jsp = 새로운 jscrollpane (jtable); /** * 弹出式菜单事件监听器编写 */// 查看菜单 jmiscan.addactionListener (new ActionListener () {@override public void actionPerformed (actionEvent e) {if (jtable.getSelectedRow ()> = 0) {int index = jtable.getSelectedRow (); OIS = DIARING (DIA) OIS.CLOSE (); "; jta.scrollpane (JSCrollpane); .getContent ()). jf.settitle ( "日记"+일기 [index] .getName (). replacefirst ( ". dat", ""); jf.add (JSP, BorderLayout.Center); jf.add (jptitle, borderlayout.north); jf.setsize (400,400); jf.setLocationRelativeTo (null); jf.setDefaultCloseOperation (dispose_on_close); jf.set -Visible (true); } catch (예외) {ex.printstacktrace (); }} else {joptionpane.showmessagedialog (null, "请先选中一个日记!"); }}}); // 删除菜单 jmidelete.addactionListener (new ActionListener () {@override public void actionPerformed (actionEvent e) {if (jtable.getSelectedRow ()> = 0) {int index = jtable.getStelectedRow (); String filename = "C : /Calendar/Diary/"+Diary [index] .getName (); file file = 새 파일 (filename); int 옵션 = JoptionPane.showConfirmDialog (null,"你确定要删除日记 "+Diary [index] .getName () +"옵션 == joptionpane.yes_option. else {}} else {joptionpane.showmessagedialog (null, "请先选中一个日记!"); / ** * 主框架布局 */ this.add (jsp, borderlayout.center); this.add (jpmotto, borderlayout.south); this.setsize (600, 500); this.setDefaultCloseOperation (dispose_on_close); this.setLocationRelativeTo (null); this.settitle ( "日记列表"); this.set -Visible (true); 새 스레드 (new Thread_mottosparkle (jlblmotto)). start (); }}Thread_showenglish.java
패키지 캘린다; import java.awt.color; import java.awt.font; import java.io.bufferedReader; import java.io.filereader; import java.io.linenuberReader; import java.security.securerandom; import java.util.random; import javax.swing.jlabel; Public Class Thread_showEnglish는 실행 가능한 {private static jlabel jlbl = new Jlabel (); font font = new Font ( "��� ×", font.bold, 18); public thread_showenglish (jlabel jlbl) {this.jlbl = jlbl; jlbl.setforeground (color.magenta); jlbl.setfont (font); } @override public void run () {// todo 자동 생성 메소드 스터브 int count = 0; try {string file = "C : /calendar/Learning/english_word.txt"; bufferedReader input = new bufferedReader (new FilEreader (file)); 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 (file)); 문자열 내용 = ""; int line = 0; while ((content = input1.readline ())! = null) {if (line == Word [index]) {jlbl.settext (content); } line ++; } if (index == count-1) index = 0; else index ++; Thread.sleep (3500); }} catch (예외 예) {ex.printstacktrace (); }}}以上所述就是本文的全部内容了, 希望大家能够喜欢。