版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 軟 件 學(xué) 院</b></p><p><b> 課程設(shè)計(jì)報(bào)告書(shū)</b></p><p> 課程名稱 </p><p> 設(shè)計(jì)題目 </p
2、><p> 專業(yè)班級(jí) </p><p> 學(xué) 號(hào) </p><p> 姓 名 </p><p> 指導(dǎo)教師
3、 </p><p><b> 年 月</b></p><p><b> 目錄</b></p><p> JAVA日歷設(shè)計(jì)2</p><p><b> 1.設(shè)計(jì)目標(biāo)2</b></p>
4、<p><b> 2.設(shè)計(jì)要求2</b></p><p><b> 3.制作要點(diǎn):2</b></p><p><b> 4.設(shè)計(jì)思想2</b></p><p> 5.設(shè)計(jì)類及對(duì)象設(shè)計(jì)3</p><p><b> 6.代碼分析3</
5、b></p><p><b> 6.程序源代碼9</b></p><p><b> 7.調(diào)試記錄14</b></p><p><b> 8.總結(jié)15</b></p><p><b> 9.參考文獻(xiàn)16</b></p>&
6、lt;p><b> JAVA日歷設(shè)計(jì)</b></p><p><b> 1.設(shè)計(jì)目標(biāo)</b></p><p> 本課程設(shè)計(jì)實(shí)現(xiàn)一個(gè)日歷的功能,可顯示當(dāng)前的年,月,日和星期.也可以查詢,選擇年,月后,顯示當(dāng)時(shí)的日歷.</p><p><b> 2.設(shè)計(jì)要求 </b></p>
7、<p> ?。?)界面是日歷。該日歷可以按年前后翻動(dòng),當(dāng)鼠標(biāo)單擊“上一年”按鈕時(shí),當(dāng)前日歷的年份將減一;當(dāng)鼠標(biāo)左鍵單擊“下年”按鈕,當(dāng)前日歷的年份將加一。 (2)也可以在某年內(nèi)按月前后翻動(dòng)。當(dāng)鼠標(biāo)左鍵單擊“上月”按鈕時(shí),當(dāng)前日歷的月份將減一;當(dāng)鼠標(biāo)左鍵單擊“下月” 當(dāng)前日歷表的月份將加一。 (3)使用鼠標(biāo)左鍵在要選擇的日期上單擊,變顏色.</p><p><b> 3.制作要點(diǎn):
8、</b></p><p> (1).AWT與Swing的使用.</p><p> (2)應(yīng)用JApplet生成界面.</p><p><b> 4.設(shè)計(jì)思想</b></p><p> (1)本小日歷設(shè)計(jì)主體結(jié)構(gòu)為:設(shè)計(jì)一個(gè)框架MainFrame,然后在MainFrame里添加一個(gè)MainPanel面板
9、。定義一個(gè)MainPanel面板類,該面板以邊布局格式,所有其他面板、標(biāo)簽等均添加到該面板中。</p><p> ?。?)MainPanel面板北部(上方),添加一個(gè)年月面板YearMonthPanel。該年月面板主要放年份顯示、月份顯示、標(biāo)題顯示。YearMonthPanel面板也使用邊布局格式,西部添加一個(gè)年份面板,放年份信息;中部添加一個(gè)TextPanel面板,放標(biāo)題文本顯示信息;東部添加一個(gè)月份面板Mon
10、thPanel,放月份下拉框信息。</p><p> ?。?)MainPanel主面板的中部,添加一個(gè)DaysPanel面板用于放置月份的天數(shù)表格信息。</p><p> (4)MainPanel主面板的南部(下方),添加一個(gè)InfoPanel面板,主要用于放置顯示個(gè)人信息。</p><p> ?。?)InfoPanel面板上設(shè)計(jì)添加一個(gè)超級(jí)鏈接標(biāo)簽,鏈接到個(gè)人博
11、客。</p><p> 5.設(shè)計(jì)類及對(duì)象設(shè)計(jì)</p><p> 在本程序中:定義了一個(gè)Frame類,主要定義一個(gè)窗體框架,用于顯示日歷信息,并在主函數(shù)中只創(chuàng)建一個(gè)該窗體對(duì)象實(shí)現(xiàn)程序功能。</p><p> 定義了一個(gè)主日歷面板類MyCalendar,其中包含了日歷設(shè)計(jì)所用到的全局變量、功能函數(shù)等,在Frame類里定義了其對(duì)象。在該日歷面板類里又設(shè)計(jì)了一個(gè)內(nèi)部類
12、CalendarTable表格類,用于布局日歷天的顯示格式。</p><p> 為了設(shè)計(jì)一個(gè)超級(jí)鏈接,定義了一個(gè)LinkLable類,單獨(dú)保存在一個(gè)文件LinkTbale.java中,在日歷面板類MyCalendar里定義了其對(duì)象。</p><p><b> 6.代碼分析</b></p><p> 定義星期天到星期六全局變量</p&
13、gt;<p> public static final String WEEK_SUN = "星期日"; //星期標(biāo)簽名稱</p><p> public static final String WEEK_MON = "星期一";</p><p> public static final String WEEK_TUE
14、 = "星期二";</p><p> public static final String WEEK_WED = "星期三";</p><p> public static final String WEEK_THU = "星期四";</p><p> public static final Stri
15、ng WEEK_FRI = "星期五";</p><p> public static final String WEEK_SAT = "星期六";</p><p> public static final Color background = Color.white; //設(shè)置背景顏色</p><p>
16、 public static final Color foreground = Color.black; //設(shè)置前景顏色</p><p> public static final Color headerBackground = Color.blue; //設(shè)置題頭星期的背景顏色</p><p> public static final Color hea
17、derForeground = Color.white; //設(shè)置題頭星期的前景顏色</p><p> public static final Color selectedBackground = Color.green; //設(shè)置被選中的日期的背景顏色</p><p> public static final Color selectedForeground = Color
18、.white; //設(shè)置被選中的日期的前景顏色</p><p> private JPanel cPane; //日歷面板</p><p> private JLabel yearsLabel; //"年份"標(biāo)簽</p><p> private JSpinner yearsSpinner; //年調(diào)控,年
19、份組合框</p><p> private JLabel monthsLabel; //"月份"標(biāo)簽</p><p> private JComboBox monthsComboBox;//12月下拉框</p><p> private JTable daysTable; //用來(lái)顯示日期的table,日表格</
20、p><p> private AbstractTableModel daysModel;//天單元表格</p><p> private Calendar calendar; //日歷對(duì)象</p><p><b> 函數(shù)定義</b></p><p> public MyCalendar() { //構(gòu)
21、造函數(shù)</p><p> cPane = (JPanel) getContentPane();</p><p><b> }</b></p><p> public void init() { //初始化,對(duì)所有的空間進(jìn)行布局,面板界面函數(shù)</p><p> cPane.setLayout(new Border
22、Layout());</p><p> //使用border布局管理器</p><p> calendar = Calendar.getInstance();//默認(rèn)方式,以本地的時(shí)區(qū)和地區(qū)來(lái)構(gòu)造Calendar</p><p> yearsLabel = new JLabel("年份: ");//設(shè)置年份標(biāo)簽顯示</p>&
23、lt;p> yearsSpinner = new JSpinner();//構(gòu)造年份spinner組合框</p><p> yearsSpinner.setEditor(new JSpinner.NumberEditor(yearsSpinner, "0000"));</p><p> yearsSpinner.setValue(new Integer(ca
24、lendar.get(Calendar.YEAR)));</p><p> //增加監(jiān)聽(tīng) 監(jiān)聽(tīng)年份的改變</p><p> yearsSpinner.addChangeListener(new ChangeListener() {//注冊(cè)該組合框的事件監(jiān)聽(tīng)器</p><p> public void stateChanged(ChangeEvent chang
25、eEvent) {</p><p> int day = calendar.get(Calendar.DAY_OF_MONTH);</p><p> calendar.set(Calendar.DAY_OF_MONTH, 1);</p><p> calendar.set(Calendar.YEAR, ((Integer) yearsSpinner.getVa
26、lue()).intValue());</p><p> int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);</p><p> calendar.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day);</p><p> up
27、dateView();//更新顯示</p><p><b> }</b></p><p><b> });</b></p><p> JPanel yearMonthPanel = new JPanel();//定義年月面板</p><p> cPane.add(yearMonthPanel
28、, BorderLayout.NORTH);//添加年月面板到日歷面板的南面(最上方)</p><p> yearMonthPanel.setLayout(new BorderLayout());//邊布局模式</p><p> yearMonthPanel.add(new JPanel(), BorderLayout.CENTER);</p><p> JP
29、anel yearPanel = new JPanel();//構(gòu)建年份面板</p><p> yearMonthPanel.add(yearPanel, BorderLayout.WEST);//年份面板添加到年月面板西部(左邊)</p><p> yearPanel.setLayout(new BorderLayout());//設(shè)置年份面板為邊布局并添加年份標(biāo)簽和組合框</
30、p><p> yearPanel.add(yearsLabel, BorderLayout.WEST);</p><p> yearPanel.add(yearsSpinner, BorderLayout.CENTER);</p><p> monthsLabel = new JLabel("月份: "); //設(shè)置月份標(biāo)簽顯示</p&g
31、t;<p> monthsComboBox = new JComboBox(); //向月份下拉框中增加內(nèi)容</p><p> for (int i = 1; i <= 12; i++) { //構(gòu)造下拉框的12個(gè)月份</p><p> monthsComboBox.addItem(new Integer(i));</p><p><
32、;b> }</b></p><p> monthsComboBox.setSelectedIndex(calendar.get(Calendar.MONTH));//下拉框當(dāng)前月份為選中狀態(tài)</p><p> monthsComboBox.addActionListener(new ActionListener() { //注冊(cè)月份下拉框的事件監(jiān)聽(tīng)器</p&g
33、t;<p> public void actionPerformed(ActionEvent actionEvent) {</p><p> int day = calendar.get(Calendar.DAY_OF_MONTH);</p><p> calendar.set(Calendar.DAY_OF_MONTH, 1);</p><p>
34、; calendar.set(Calendar.MONTH, monthsComboBox.getSelectedIndex());</p><p> int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);</p><p> calendar.set(Calendar.DAY_OF_MONTH, day >
35、maxDay ? maxDay : day);</p><p> updateView();//更新面板顯示</p><p><b> }</b></p><p><b> });</b></p><p> JPanel monthPanel = new JPanel();//定義月份面板&
36、lt;/p><p> yearMonthPanel.add(monthPanel, BorderLayout.EAST);//添加月份面板到年月面板的東面(右面)</p><p> monthPanel.setLayout(new BorderLayout());//月份面板設(shè)為邊布局方式</p><p> monthPanel.add(monthsLabel,
37、BorderLayout.WEST);//添加月份名稱標(biāo)簽到月份面板西面(左面)</p><p> monthPanel.add(monthsComboBox, BorderLayout.CENTER);//添加月份下拉框到月份面板中間</p><p> daysModel = new AbstractTableModel() { //設(shè)置7行7列</p><p
38、> public int getRowCount() { //設(shè)置7行</p><p><b> return 7;</b></p><p><b> }</b></p><p> public int getColumnCount() { //設(shè)置列7</p><p
39、><b> return 7;</b></p><p><b> }</b></p><p> public Object getValueAt(int row, int column) {</p><p> if (row == 0) { //第一行顯示星期</p><p> re
40、turn getHeader(column);</p><p><b> }</b></p><p><b> row--;</b></p><p> Calendar calendar = (Calendar) MyCalendar.this.calendar.clone();</p><p&g
41、t; calendar.set(Calendar.DAY_OF_MONTH, 1);</p><p> int dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);</p><p> int moreDayCount = calendar.get(Calendar.DAY_OF_WEEK) - 1;</p>
42、;<p> int index = row * 7 + column;</p><p> int dayIndex = index - moreDayCount + 1;</p><p> if (index < moreDayCount || dayIndex > dayCount) {</p><p> return null;
43、</p><p><b> } else {</b></p><p> return new Integer(dayIndex);</p><p><b> }</b></p><p><b> }</b></p><p><b>
44、};</b></p><p> daysTable = new CalendarTable(daysModel, calendar);//構(gòu)造日表格</p><p> //設(shè)置每個(gè)call可以被選中</p><p> daysTable.setCellSelectionEnabled(true);//設(shè)置表格單元格可選擇</p>&l
45、t;p> daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);</p><p> daysTable.setDefaultRenderer(daysTable.getColumnClass(0), new TableCellRenderer() {</p><p> public Component g
46、etTableCellRendererComponent(JTable table, Object value, boolean isSelected,</p><p> boolean hasFocus, int row, int column) {</p><p> String text = (value == null) ? "" : value.toStr
47、ing();</p><p> JLabel cell = new JLabel(text);</p><p> cell.setOpaque(true);//繪制邊界內(nèi)的所有像素</p><p> if (row == 0) {//第一行顯示星期,設(shè)置為星期的前景色和背景色</p><p> cell.setForeground(h
48、eaderForeground);</p><p> cell.setBackground(headerBackground);</p><p><b> } else {</b></p><p> if (isSelected) {//日期單元格如果選中,則設(shè)置為日期選中的前、背景色</p><p> cell
49、.setForeground(selectedForeground);</p><p> cell.setBackground(selectedBackground);</p><p> } else { //設(shè)置日期單元格的普通前、背景色</p><p> cell.setForeground(foreground);</p><p>
50、; cell.setBackground(background);</p><p><b> }</b></p><p><b> }</b></p><p> return cell;</p><p><b> }</b></p><p>&
51、lt;b> });</b></p><p> updateView();</p><p> cPane.add(daysTable, BorderLayout.CENTER);//添加日面板到日歷面板中間</p><p><b> }</b></p><p> public static St
52、ring getHeader(int index) {//設(shè)置第一行星期的顯示</p><p> switch (index) {</p><p><b> case 0:</b></p><p> return WEEK_SUN;</p><p><b> case 1:</b></
53、p><p> return WEEK_MON;</p><p><b> case 2:</b></p><p> return WEEK_TUE;</p><p><b> case 3:</b></p><p> return WEEK_WED;</p>
54、<p><b> case 4:</b></p><p> return WEEK_THU;</p><p><b> case 5:</b></p><p> return WEEK_FRI;</p><p><b> case 6:</b></
55、p><p> return WEEK_SAT;</p><p><b> default:</b></p><p> return null;</p><p><b> }</b></p><p><b> }</b></p><
56、;p> public void updateView() {//更新面板顯示方法</p><p> daysModel.fireTableDataChanged();</p><p> daysTable.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH),</p><p> cal
57、endar.get(Calendar.WEEK_OF_MONTH));</p><p> daysTable.setColumnSelectionInterval(calendar.get(Calendar.DAY_OF_WEEK) - 1,</p><p> calendar.get(Calendar.DAY_OF_WEEK) - 1);</p><p>&l
58、t;b> }</b></p><p> 設(shè)置日歷的table</p><p> public static class CalendarTable extends JTable {//表格類</p><p> private Calendar calendar;</p><p> public CalendarTa
59、ble(TableModel model, Calendar calendar) {//構(gòu)造方法</p><p> super(model);</p><p> this.calendar = calendar;</p><p><b> }</b></p><p> public void changeSele
60、ction(int row, int column, boolean toggle, boolean extend) {//選擇表格單元格時(shí)</p><p> super.changeSelection(row, column, toggle, extend);</p><p> if (row == 0) {//選擇為第一行(星期)時(shí)不改變單元格</p><p&g
61、t;<b> return;</b></p><p><b> }</b></p><p> Object obj = getValueAt(row, column);</p><p> if (obj != null) {</p><p> calendar.set(Calendar.D
62、AY_OF_MONTH, ((Integer)obj).intValue());</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 讓applet作為一個(gè)可執(zhí)行的程序來(lái)運(yùn)行</p&g
63、t;<p> public static void main(String[] args) {</p><p> JFrame frame = new JFrame("日歷");</p><p> frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p> M
64、yCalendar myCalendar = new MyCalendar();</p><p> myCalendar.init();</p><p> frame.getContentPane().add(myCalendar);</p><p> frame.setSize(400, 250);</p><p> frame.s
65、how();</p><p><b> }</b></p><p><b> }</b></p><p><b> 6.程序源代碼</b></p><p> import java.awt.*;</p><p> import java.awt
66、.event.*;</p><p> import java.util.*;</p><p> import javax.swing.*;</p><p> import javax.swing.event.*;</p><p> import javax.swing.table.*;</p><p> pu
67、blic class MyCalendar extends JApplet {</p><p> //定義星期天到星期六全局變量</p><p> public static final String WEEK_SUN = "星期日"; //星期標(biāo)簽名稱</p><p> public static final String W
68、EEK_MON = "星期一";</p><p> public static final String WEEK_TUE = "星期二";</p><p> public static final String WEEK_WED = "星期三";</p><p> public static fin
69、al String WEEK_THU = "星期四";</p><p> public static final String WEEK_FRI = "星期五";</p><p> public static final String WEEK_SAT = "星期六";</p><p> public
70、 static final Color background = Color.white; //設(shè)置背景顏色</p><p> public static final Color foreground = Color.black; //設(shè)置前景顏色</p><p> public static final Color headerBackground
71、 = Color.blue; //設(shè)置題頭星期的背景顏色</p><p> public static final Color headerForeground = Color.white; //設(shè)置題頭星期的前景顏色</p><p> public static final Color selectedBackground = Color.green; //設(shè)置被選
72、中的日期的背景顏色</p><p> public static final Color selectedForeground = Color.white; //設(shè)置被選中的日期的前景顏色</p><p> private JPanel cPane; //日歷面板</p><p> private JLabel yearsLabel;
73、 //"年份"標(biāo)簽</p><p> private JSpinner yearsSpinner; //年調(diào)控,年份組合框</p><p> private JLabel monthsLabel; //"月份"標(biāo)簽</p><p> private JComboBox monthsComboBox;//1
74、2月下拉框</p><p> private JTable daysTable; //用來(lái)顯示日期的table,日表格</p><p> private AbstractTableModel daysModel;//天單元表格</p><p> private Calendar calendar; //日歷對(duì)象</p>
75、<p><b> //函數(shù)定義</b></p><p> public MyCalendar() { //構(gòu)造函數(shù)</p><p> cPane = (JPanel) getContentPane();</p><p><b> }</b></p><p> public v
76、oid init() { //初始化,對(duì)所有的空間進(jìn)行布局,面板界面函數(shù)</p><p> cPane.setLayout(new BorderLayout());</p><p> //使用border布局管理器</p><p> calendar = Calendar.getInstance();//默認(rèn)方式,以本地的時(shí)區(qū)和地區(qū)來(lái)構(gòu)造Calendar&l
77、t;/p><p> yearsLabel = new JLabel("年份: ");//設(shè)置年份標(biāo)簽顯示</p><p> yearsSpinner = new JSpinner();//構(gòu)造年份spinner組合框</p><p> yearsSpinner.setEditor(new JSpinner.NumberEditor(yearsS
78、pinner, "0000"));</p><p> yearsSpinner.setValue(new Integer(calendar.get(Calendar.YEAR)));</p><p> //增加監(jiān)聽(tīng) 監(jiān)聽(tīng)年份的改變</p><p> yearsSpinner.addChangeListener(new ChangeListe
79、ner() {//注冊(cè)該組合框的事件監(jiān)聽(tīng)器</p><p> public void stateChanged(ChangeEvent changeEvent) {</p><p> int day = calendar.get(Calendar.DAY_OF_MONTH);</p><p> calendar.set(Calendar.DAY_OF_MONT
80、H, 1);</p><p> calendar.set(Calendar.YEAR, ((Integer) yearsSpinner.getValue()).intValue());</p><p> int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);</p><p> calenda
81、r.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day);</p><p> updateView();//更新顯示</p><p><b> }</b></p><p><b> });</b></p><p> JPanel
82、 yearMonthPanel = new JPanel();//定義年月面板</p><p> cPane.add(yearMonthPanel, BorderLayout.NORTH);//添加年月面板到日歷面板的南面(最上方)</p><p> yearMonthPanel.setLayout(new BorderLayout());//邊布局模式</p><
83、p> yearMonthPanel.add(new JPanel(), BorderLayout.CENTER);</p><p> JPanel yearPanel = new JPanel();//構(gòu)建年份面板</p><p> yearMonthPanel.add(yearPanel, BorderLayout.WEST);//年份面板添加到年月面板西部(左邊)</
84、p><p> yearPanel.setLayout(new BorderLayout());//設(shè)置年份面板為邊布局并添加年份標(biāo)簽和組合框</p><p> yearPanel.add(yearsLabel, BorderLayout.WEST);</p><p> yearPanel.add(yearsSpinner, BorderLayout.CENTER)
85、;</p><p> monthsLabel = new JLabel("月份: "); //設(shè)置月份標(biāo)簽顯示</p><p> monthsComboBox = new JComboBox(); //向月份下拉框中增加內(nèi)容</p><p> for (int i = 1; i <= 12; i++) { //構(gòu)造下拉框的12個(gè)月份
86、</p><p> monthsComboBox.addItem(new Integer(i));</p><p><b> }</b></p><p> monthsComboBox.setSelectedIndex(calendar.get(Calendar.MONTH));//下拉框當(dāng)前月份為選中狀態(tài)</p><
87、p> monthsComboBox.addActionListener(new ActionListener() { //注冊(cè)月份下拉框的事件監(jiān)聽(tīng)器</p><p> public void actionPerformed(ActionEvent actionEvent) {</p><p> int day = calendar.get(Calendar.DAY_OF_MON
88、TH);</p><p> calendar.set(Calendar.DAY_OF_MONTH, 1);</p><p> calendar.set(Calendar.MONTH, monthsComboBox.getSelectedIndex());</p><p> int maxDay = calendar.getActualMaximum(Calen
89、dar.DAY_OF_MONTH);</p><p> calendar.set(Calendar.DAY_OF_MONTH, day > maxDay ? maxDay : day);</p><p> updateView();//更新面板顯示</p><p><b> }</b></p><p><
90、;b> });</b></p><p> JPanel monthPanel = new JPanel();//定義月份面板</p><p> yearMonthPanel.add(monthPanel, BorderLayout.EAST);//添加月份面板到年月面板的東面(右面)</p><p> monthPanel.setLayou
91、t(new BorderLayout());//月份面板設(shè)為邊布局方式</p><p> monthPanel.add(monthsLabel, BorderLayout.WEST);//添加月份名稱標(biāo)簽到月份面板西面(左面)</p><p> monthPanel.add(monthsComboBox, BorderLayout.CENTER);//添加月份下拉框到月份面板中間<
92、;/p><p> daysModel = new AbstractTableModel() { //設(shè)置7行7列</p><p> public int getRowCount() { //設(shè)置7行</p><p><b> return 7;</b></p><p><b> }<
93、/b></p><p> public int getColumnCount() { //設(shè)置列7</p><p><b> return 7;</b></p><p><b> }</b></p><p> public Object getValueAt(int row,
94、int column) {</p><p> if (row == 0) { //第一行顯示星期</p><p> return getHeader(column);</p><p><b> }</b></p><p><b> row--;</b></p><p>
95、; Calendar calendar = (Calendar) MyCalendar.this.calendar.clone();</p><p> calendar.set(Calendar.DAY_OF_MONTH, 1);</p><p> int dayCount = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);<
96、/p><p> int moreDayCount = calendar.get(Calendar.DAY_OF_WEEK) - 1;</p><p> int index = row * 7 + column;</p><p> int dayIndex = index - moreDayCount + 1;</p><p> if (i
97、ndex < moreDayCount || dayIndex > dayCount) {</p><p> return null;</p><p><b> } else {</b></p><p> return new Integer(dayIndex);</p><p><b>
98、}</b></p><p><b> }</b></p><p><b> };</b></p><p> daysTable = new CalendarTable(daysModel, calendar);//構(gòu)造日表格</p><p> //設(shè)置每個(gè)call可以被選中<
99、;/p><p> daysTable.setCellSelectionEnabled(true);//設(shè)置表格單元格可選擇</p><p> daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);</p><p> daysTable.setDefaultRenderer(daysTable
100、.getColumnClass(0), new TableCellRenderer() {</p><p> public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,</p><p> boolean hasFocus, int row, int colu
101、mn) {</p><p> String text = (value == null) ? "" : value.toString();</p><p> JLabel cell = new JLabel(text);</p><p> cell.setOpaque(true);//繪制邊界內(nèi)的所有像素</p><p&
102、gt; if (row == 0) {//第一行顯示星期,設(shè)置為星期的前景色和背景色</p><p> cell.setForeground(headerForeground);</p><p> cell.setBackground(headerBackground);</p><p><b> } else {</b></p&
103、gt;<p> if (isSelected) {//日期單元格如果選中,則設(shè)置為日期選中的前、背景色</p><p> cell.setForeground(selectedForeground);</p><p> cell.setBackground(selectedBackground);</p><p> } else { //設(shè)置日
104、期單元格的普通前、背景色</p><p> cell.setForeground(foreground);</p><p> cell.setBackground(background);</p><p><b> }</b></p><p><b> }</b></p>&l
105、t;p> return cell;</p><p><b> }</b></p><p><b> });</b></p><p> updateView();</p><p> cPane.add(daysTable, BorderLayout.CENTER);//添加日面板到日歷
106、面板中間</p><p><b> }</b></p><p> public static String getHeader(int index) {//設(shè)置第一行星期的顯示</p><p> switch (index) {</p><p><b> case 0:</b></p&
107、gt;<p> return WEEK_SUN;</p><p><b> case 1:</b></p><p> return WEEK_MON;</p><p><b> case 2:</b></p><p> return WEEK_TUE;</p>
108、<p><b> case 3:</b></p><p> return WEEK_WED;</p><p><b> case 4:</b></p><p> return WEEK_THU;</p><p><b> case 5:</b></p&
109、gt;<p> return WEEK_FRI;</p><p><b> case 6:</b></p><p> return WEEK_SAT;</p><p><b> default:</b></p><p> return null;</p><
110、;p><b> }</b></p><p><b> }</b></p><p> public void updateView() {//更新面板顯示方法</p><p> daysModel.fireTableDataChanged();</p><p> daysTable.s
111、etRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH),</p><p> calendar.get(Calendar.WEEK_OF_MONTH));</p><p> daysTable.setColumnSelectionInterval(calendar.get(Calendar.DAY_OF_WEEK) - 1,
112、</p><p> calendar.get(Calendar.DAY_OF_WEEK) - 1);</p><p><b> }</b></p><p> //設(shè)置日歷的table</p><p> public static class CalendarTable extends JTable {//表格類&
113、lt;/p><p> private Calendar calendar;</p><p> public CalendarTable(TableModel model, Calendar calendar) {//構(gòu)造方法</p><p> super(model);</p><p> this.calendar = calendar;
114、</p><p><b> }</b></p><p> public void changeSelection(int row, int column, boolean toggle, boolean extend) {//選擇表格單元格時(shí)</p><p> super.changeSelection(row, column, togg
115、le, extend);</p><p> if (row == 0) {//選擇為第一行(星期)時(shí)不改變單元格</p><p><b> return;</b></p><p><b> }</b></p><p> Object obj = getValueAt(row, column)
116、;</p><p> if (obj != null) {</p><p> calendar.set(Calendar.DAY_OF_MONTH, ((Integer)obj).intValue());</p><p><b> }</b></p><p><b> }</b></p
117、><p><b> }</b></p><p> //讓applet作為一個(gè)可執(zhí)行的程序來(lái)運(yùn)行</p><p> public static void main(String[] args) {</p><p> JFrame frame = new JFrame("Calendar Application
118、");</p><p> frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p> MyCalendar myCalendar = new MyCalendar();</p><p> myCalendar.init();</p><p> frame.ge
119、tContentPane().add(myCalendar);</p><p> frame.setSize(400, 250);</p><p> frame.show();</p><p><b> }</b></p><p><b> }</b></p><p>
120、;<b> 7.調(diào)試記錄</b></p><p><b> 程序功能調(diào)試如下:</b></p><p> 運(yùn)行程序,出現(xiàn)日歷界面:</p><p><b> 8.總結(jié)</b></p><p> (1)選題目的:本次課程設(shè)計(jì)為課本后設(shè)計(jì)題目任選一題進(jìn)行設(shè)計(jì)。思考一段時(shí)間
121、后,我決定做一個(gè)小日歷組件的設(shè)計(jì)。主要考慮到本學(xué)期時(shí)間少課程內(nèi)容多,JAVA課程基礎(chǔ)內(nèi)容掌握并不是很抓實(shí),而對(duì)于設(shè)計(jì)一個(gè)小日歷組件,由于其功能簡(jiǎn)單設(shè)計(jì)也相對(duì)較易,對(duì)于我個(gè)人的學(xué)習(xí)情況比較合適,并且通過(guò)設(shè)計(jì)這樣的一個(gè)日歷小組件,也能使自己對(duì)JAVA的一些基礎(chǔ)知識(shí)掌握的更加牢固。</p><p> ?。?)對(duì)于本小日歷的設(shè)計(jì),首先考慮其功能有哪些,需要顯示什么,如何進(jìn)行窗體構(gòu)建布局,需要用哪些知識(shí)點(diǎn),如相關(guān)的類和對(duì)象
122、等。最后,就是根據(jù)初步設(shè)計(jì)的功能和布局構(gòu)架,考慮用源代碼進(jìn)行實(shí)現(xiàn)了。</p><p> ?。?)本小日歷組件在設(shè)計(jì)過(guò)程中參考了一些網(wǎng)絡(luò)上的日歷組件設(shè)計(jì)程序,只是那些程序大都使用功能相對(duì)較豐富,涉及到的知識(shí)也比較多,對(duì)于自己目前所掌握的內(nèi)容來(lái)說(shuō)有點(diǎn)廣博。不過(guò)那些程序?qū)θ諝v實(shí)現(xiàn)的一些思想對(duì)我確實(shí)有很多啟發(fā)。本小日歷組件設(shè)計(jì)過(guò)程中也參考了一些他人設(shè)計(jì)的代碼。在設(shè)計(jì)本小日歷組件過(guò)程中遇到過(guò)許多問(wèn)題,最后都是在網(wǎng)絡(luò)搜集詢問(wèn)
123、的幫助下一一得以解決。</p><p> 經(jīng)過(guò)了長(zhǎng)時(shí)間的反復(fù)編寫(xiě)調(diào)試,課本和網(wǎng)上查閱相關(guān)資料相關(guān)文章,終于完成了整個(gè)課程設(shè)計(jì)。在這個(gè)過(guò)程中,在把書(shū)本上的知識(shí)給系統(tǒng)的復(fù)習(xí)了一下的同時(shí),同時(shí)也發(fā)現(xiàn)了自己的太多不足,對(duì)JAVA2語(yǔ)言整體知識(shí)構(gòu)架不夠熟悉,不能靈活地運(yùn)用所學(xué)的知識(shí)點(diǎn)。自己的編程方式也不是太標(biāo)準(zhǔn),經(jīng)常出現(xiàn)代碼寫(xiě)錯(cuò)而調(diào)試很久的低級(jí)錯(cuò)誤情況出現(xiàn)。</p><p> 通過(guò)這次課程設(shè)計(jì),
124、我明白了編寫(xiě)程序,不僅要求對(duì)課本知識(shí)有較深刻的了解,同時(shí)要求程序設(shè)計(jì)者有較強(qiáng)的思維和動(dòng)手能力。還要熟悉常用的編程技巧和編程思想,不能只關(guān)心程序的運(yùn)行結(jié)果,更要注重程序代碼的結(jié)構(gòu),編程者更要有嚴(yán)謹(jǐn)?shù)貞B(tài)度。還有通過(guò)設(shè)計(jì)過(guò)程中大量地查閱網(wǎng)絡(luò)文章,對(duì)一些關(guān)鍵知識(shí)點(diǎn)逐個(gè)地了解并解決相關(guān)問(wèn)題。所以網(wǎng)絡(luò)這個(gè)強(qiáng)大的工具,確實(shí)是我們學(xué)習(xí)之中可以借助的一個(gè)很好的幫手。網(wǎng)絡(luò)是我們學(xué)習(xí)的最好的老師之一。有問(wèn)題,問(wèn)網(wǎng)絡(luò),是一個(gè)很好的習(xí)慣。</p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小日歷-java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- java課程設(shè)計(jì)--日歷
- java課程設(shè)計(jì)簡(jiǎn)單日歷
- java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告俄羅斯方塊
- java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告---俄羅斯方塊
- java課程設(shè)計(jì)--日歷記事本
- 文本編輯器_java課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- java課程設(shè)計(jì)日歷記事本
- java課程設(shè)計(jì)--日歷記事本
- 日歷記事本-java課程設(shè)計(jì)
- 日歷記事本java課程設(shè)計(jì)
- 《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)---java日歷
- 《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)java日歷
- 日歷記事本java課程設(shè)計(jì)論文
- java課程設(shè)計(jì)報(bào)告---計(jì)算器應(yīng)用程序?qū)嶒?yàn)報(bào)告
- java課程設(shè)計(jì)----課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告-
- java課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論