萬年曆-Java課程設計題(eclipse編輯器)
阿新 • • 發佈:2018-12-25
專案目錄結構:
`CalendarMainClass.java`
`CalendarFrame.java`package Calendar; /** * CalendarMainClass主類 * @author Administrator * @version 版本1.0 */ public class CalendarMainClass { /** * 主函式 * @param args 傳入的引數 args */ public static void main(String[] args) { /** * 建立一個基於CalendarFrame的主容器fram */ CalendarFrame frame=new CalendarFrame(); /** * 設定主容器的顯示位置,以及介面的高和寬資料 */ frame.setBounds(200,150,670,490); /** * 設定主容器為可見 */ frame.setVisible(true); /** * 主容器初始化年月資訊 */ frame.setYearAndMonth(2016,1); /** * 設定主容器的標題 */ frame.setTitle("萬年曆"); } }
package Calendar; import java.util.*; import java.awt.*; import java.awt.event.*; import java.text.SimpleDateFormat; import javax.swing.*; import javax.swing.border.*; /** * * 窗體的具體構造及執行程式碼 * @author Administrator * @version 版本1.0 */ public class CalendarFrame extends JFrame implements ActionListener,ItemListener{ private static final long serialVersionUID = 1L; /** * labelDay[] 存放每一天的標籤陣列| * titleName 顯示標題欄名稱的按鈕| * text 輸入年份的文字框| * button,button1 按鈕元件| * label 標籤| * comBox 下拉列表元件| * showMessage 顯示日曆的標籤項 * */ JLabel labelDay[]=new JLabel[42]; JButton titleName[]=new JButton[7]; JTextField text; JButton button,button1; JLabel label1,label2; JComboBox<String> comBox; String name[]={"日","一","二","三","四","五","六"}; CalendarBean calendar; JLabel showMessage=new JLabel("",JLabel.CENTER); int year=2011,month=2; /** * JFrame都是Windows類的子類,因此主視窗為Windows型容器,其預設佈局為BorderLayout佈局 */ public CalendarFrame(){ /** * 為窗體修改自定義圖示 */ Image icon=Toolkit.getDefaultToolkit().getImage("F:\\eclipse\\程式碼區\\Calendar\\src\\Calendar\\calendar1.png"); setIconImage(icon); /** * 建立面板(可向面板中新增元件,再將面板新增到其他容器中) */ JPanel pCenter=new JPanel(); /** * 將pCenter的佈局設定為7行7列的GridLayout佈局 */ pCenter.setLayout(new GridLayout(7,7)); pCenter.setBackground(Color.WHITE); /** * 向主容器中新增星期欄 */ for(int i=0;i<7;i++){ titleName[i]=new JButton(name[i]); titleName[i].setBorder(new SoftBevelBorder(BevelBorder.RAISED)); //titleName[i].setBackground(Color.green); pCenter.add(titleName[i]); } /** * 向主容器新增每個小日期標籤 */ for(int i=0;i<42;i++){ labelDay[i]=new JLabel("",JLabel.CENTER); labelDay[i].setBorder(new SoftBevelBorder(BevelBorder.LOWERED)); pCenter.add(labelDay[i]); } /** * 宣告calendar為calendarBean類的子類 */ calendar=new CalendarBean(); /** * 設定個元件的具體內容 * */ text=new JTextField(3); text.setText("2016"); button=new JButton("轉到"); button1=new JButton("當前日期"); label1=new JLabel(" 萬年曆 "); /** * 設定label標籤的字型大小為30px */ label1.setFont(new Font("",1,30)); /** * 建立下拉列表,並新增下拉列表選項 */ label2=new JLabel("今日:"); comBox=new JComboBox<String>(); String []a={"1","2","3","4","5","6","7","8","9","10","11","12"}; for(int i=0;i<a.length;i++) comBox.addItem(a[i]); /** * 向元件新增響應事件 */ button.addActionListener(this); button1.addActionListener(this); comBox.addItemListener(null); /** * 建立pNorth,pSouth面板 */ JPanel pNorth=new JPanel(); pNorth.setBackground(Color.cyan); JPanel pSouth=new JPanel(); /** * 向面板中新增各個元件 */ pNorth.add(label1); pNorth.add(label2); pSouth.add(button1); pSouth.add(text); pSouth.add(new JLabel("年")); pSouth.add(comBox); pSouth.add(new JLabel("月")); pSouth.add(button); pSouth.add(showMessage); /** * 將三個面板新增到以BorderLayout為佈局的主Windows型容器中 */ add(pCenter,BorderLayout.CENTER); add(pNorth,BorderLayout.NORTH); add(pSouth,BorderLayout.SOUTH); /** * 向setYearAndMonth方法傳入year,month的值 */ setYearAndMonth(year,month); /** * 設定,當點選窗體右上角的關閉圖示時,程式會做出直接結束程式的處理 */ setDefaultCloseOperation(DISPOSE_ON_CLOSE); } /** * ------編寫傳入年月的方法setYearAndMonth------ * @param y 年份 * @param m 月份 */ public void setYearAndMonth(int y,int m){ calendar.setYear(y); /** * 將setYearAndMonth方法得到的year,month的值傳給calendar類 */ calendar.setMonth(m); /** * 獲取calendar類中getCalendar方法中的日期字串陣列,將獲取的字串陣列的值傳給每個labelDay小日期標籤 */ String day[]=calendar.getCalendar(); for(int i=0;i<42;i++) labelDay[i].setText(day[i]); /** * 在showMessage標籤中顯示輸出日期 */ showMessage.setText("日曆:"+calendar.getYear()+"年"+calendar.getMonth()+"月"); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); label2.setText("今日:"+df.format(new Date())); /** * 設定標籤輸出的字型顏色為藍色 */ showMessage.setForeground(Color.BLUE); } /** * ---------重寫actionPerformed方法--------- */ public void actionPerformed(ActionEvent e){ /** * reg為正則表示式,表示純數字的字串(不含其他任何與數字無關的字元) */ String reg="^[\\d]*$"; /** * 判斷響應事件觸發的是button元件 */ if(e.getSource()==button){ /** * 這個地方如何讓程式識別並彈出對話方塊,而不是在未輸入時直接判別程式出錯 */ if(text.getText().isEmpty()){ JOptionPane.showMessageDialog(this, "您未輸入年份", "訊息對話方塊", JOptionPane.WARNING_MESSAGE); /** * 將螢幕焦點聚在text元件上 */ text.requestFocus(true); } /** * 判斷text文字框中是否為純數字,若不是則彈出對話方塊 "您輸入了非法字元" */ else if(!(text.getText()).matches(reg)){ JOptionPane.showMessageDialog(this, "您輸入了非法字元", "訊息對話方塊", JOptionPane.WARNING_MESSAGE); } /** * 判斷text文字框中是否為純數字,若是,則輸出相應年份 */ else { /** * 將文字框中得到的字串強制轉為整型值,並賦值給整型變數i */ Integer i=Integer.parseInt(text.getText()); /** * 將整型i變數中的值傳遞給calendar類中,並設定為year值 */ calendar.setYear(i); } /** * 判斷使用者是否使用了下拉列表框,若未使用,則彈出訊息對話方塊 "您未選擇月份" */ if(((String)comBox.getSelectedItem()).equals("選擇月份")) { JOptionPane.showMessageDialog(this, "您未選擇月份", "訊息對話方塊", JOptionPane.WARNING_MESSAGE); /** * 將螢幕焦點聚在comBox元件上 */ comBox.requestFocus(true); } else{ /** * 將下拉列表框中選中的字串值強制轉換為整型,並賦值給整型變數j */ Integer j=Integer.parseInt(comBox.getSelectedItem().toString()); /** * 將整型i變數中的值傳遞給calendar類中,並設定為month值 */ calendar.setMonth(j); /** * 獲取calendar類中getCalendar方法中的日期字串陣列 */ String day[]=calendar.getCalendar(); /** * 將獲取的字串陣列的值傳給每個labelDay小日期標籤 */ for(int n=0;n<42;n++){ labelDay[n].setText(day[n]); } } /** * 在showMessage標籤中顯示輸出日期 */ showMessage.setText("日曆:"+calendar.getYear()+"年"+calendar.getMonth()+"月"); } /** * 判斷響應時間觸發的是button1元件 */ else if(e.getSource()==button1){ /** * --------------獲取系統當前日期-------------- */ Calendar c=Calendar.getInstance(); int y=c.get(Calendar.YEAR); int m=c.get(Calendar.MONTH)+1; calendar.setMonth(m); String day[]=calendar.getCalendar(); for(int n=0;n<42;n++){ labelDay[n].setText(day[n]); } showMessage.setText("日曆:"+y+"年"+m+"月"); text.setText(""); } /** * 設定showMessage標籤的字型顏色為藍色 */ showMessage.setForeground(Color.BLUE); } /** * ---------重寫itemStateChanged方法-------- * 下拉列表的響應事件具體已經在actionPerformed方法內實現 */ public void itemStateChanged(ItemEvent arg0) { // TODO Auto-generated method stub } }
`CalendarBean.java`
package Calendar; import java.util.Calendar; /** * 生成日曆字串陣列 * @author Administrator * @version 版本1.0 */ public class CalendarBean { String day[]; int year=2005,month=0; /** * 設定year的set和get方法 * @param year 年份 * */ public void setYear(int year){ this.year=year; } public int getYear(){ return year; } /** * 設定month的set和get方法 * @param month 月份 */ public void setMonth(int month){ this.month=month; } public int getMonth(){ return month; } /** * 建立可以得到具體日期的字串陣列 * @return 返回具體日期的字串陣列 */ public String[] getCalendar(){ String a[]=new String[42]; Calendar 日曆=Calendar.getInstance(); 日曆.set(year, month-1, 1); int 星期幾=日曆.get(Calendar.DAY_OF_WEEK)-1; int day=0; if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) day=31; if(month==4||month==6||month==9||month==11) day=30; if(month==2){ if(((year%4==0)&&(year%100!=0))||(year%400==0)) day=29; else day=28; } for(int i=星期幾,n=1;i<星期幾+day;i++){ a[i]=String.valueOf(n); n++; } return a; } }