版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文档import java.awt.*;import java.awt.eve nt.MouseAdapter;import java.awt.eve nt.MouseEve nt;import java.util.*;import java.util.Timer;import javax.swi ng.*;import javax.swi ng.eve nt.*;import javax.swi ng.table.*;这是一个用JList和JTable完成的简单日历public class cale nderpublic static void main(String args)Even t
2、Queue.i nvokeLater( new Runn able()public void run()JFrame frame = new Cale ndarFrame();frame.setDefaultCloseOperati on (JFrame.EXIT_ON_CLOSE); frame.setVisible(true););class Cale ndarFrame exte nds JFrameprivate static fin al lo ng serialVersio nUID = 8067844586793608064L;JPanel listPanel; /显示月份的列表
3、面板JPa nel tablePa nel; /显示日期的表格面板JPa nel textPa nel; / 文本面板JMenuBar menuBar; / JMenuBar,JMenu定义的变量都没有实现功能JMe nu fileMe nu;JMenu editMe nu;JMenu formatMe nu;JMenu lookMe nu;JMe nu helpMe nu;JEditorPane text; /自带复制,剪切和删除快捷键功能的面板JScrollPa ne textscrollpa ne;JScrollPa ne tablescrollpa ne;JList list; II显
4、示月份的列表JTable table; II显示日期的表格JPa nel yearPa nel; II显示年份的面板 JSpinner spinner; II JSpinner 空间 JLabel label = new JLabel();public static boolea n flag = true;public Cale ndarFrame()table = new JTable(new MyTableModel();tablescrollpa ne = new JScrollPa ne(table);for (int i = 0; i 7; i+)获取表格每一列TableColu
5、mn colu mn = table.getColu mnM odel().getColu mn (i); column.setResizable(false);/ 不允许改变列的大小table.setBackgrou nd(Color.GREEN);table.setRowHeight(72); II 设定每列的大小 table.setRowSelectio nAllowed(false);/ 设定行的选择模式 table.setDefaultRenderer(String.class, new MyTableRenderer();list = new JList(new AbstractL
6、istModel() II匿名的 list 模型类,提供 list 显示的月份数据private static fin al lo ng serialVersio nUID = -3703164069291737586L;public Object getElementAt(int index) Stri ng obj = n ull;switch (in dex)case 0:obj = Ja n;break;case 1:obj = Feb;break;case 2:obj = Mar;break;case 3:obj = Apr;break;case 4:obj = May; break
7、;case 5:obj = Jun; break;case 6:obj = Jul; break;case 7:obj = Aug; break;case 8:obj = Sep; break;case 9:obj = Oct; break;case 10:obj = Nov; break;case 11:obj = Dec; break;return obj;Overridepublic int getSize()return 12;);list.setSelectio nM ode(ListSelectio nM odel.SINGLE_SELECTION); /设定列表的选择模式list
8、.setCelIRe nderer( new MyListCellRe nderer(); /列表元素的绘制类MyListCelIRe ndererlist.setSelectedIndex(Calendar.getlnstance().get(Calendar.MONTH);/ JList 默认的月份为现 实的月份list.addListSelecti on Liste ner(new ListSelectio nListe ner()当某个列表被选中时,更新日期table控件public void valueCha nged(ListSelect ion Eve nt e) flag =
9、true;table.updateUI(););list.addMouseListe ner(new MouseAdapter()public void mouseClicked(MouseEve nt evt)if (evt.getClickCou nt() = 2)Stri ng s = (Stri ng) list.getSelectedValue();JOpti onPan e.showMessageDialog(list, s); );listPa nel = new JPa nel();listPa nel.setLayout (new BorderLayout();listPa
10、nel.add(list);tablePa nel = new JPa nel();tablePa nel.setBackgro un d(Color.white);tablePa nel.setLayout (new BorderLayout();tablePa nel.add(tablescrollpa ne);/ table.setBackgro un d(Color.gree n);yearPanel = new JPanel();将label控件和JSpinner控件加入年份面板上yearPa nel.setLayout (new GridLayout(0, 4);JLabel go
11、ngyuan = new JLabel(公元, JLabel.RIGHT);JLabel year = new JLabel(年);spinner = new JSp inner(new Spi nn erNumberModel(Cale ndar.getl nsta nce().get(Calendar.YEAR), null, null, 1);spinner.addChangeListener(new ChangeListener() / 为 JSpinner 空间添加事件监听器 Overridepublic void stateCha nged(Cha ngeEve nt e) fla
12、g = true;table.updateUI(););yearPa nel.add(go ngyua n);yearPa nel.add(sp inner);yearPa nel.add(year);yearPa nel.add(label);showTime();new Timer().schedule( new TimerTask()Overridepublic void run()while (true)showTime();, 1000);tablePa nel.add(yearPa nel, BorderLayout.NORTH);/ 将年份面板加入到表格面板的北部 textPa
13、nel = new JPa nel();textPa nel.setLayout (new BorderLayout();text = new JEditorPa ne();textscrollpane = new JScrollPane(text);textPa nel.add(textscrollpa ne);text.setFo nt(new Fo nt(Sa nsSerif, Font. PLAIN, 40);tablePa nel.add(textPa nel, BorderLayout.SOUTH);menuBar = new JMenuBar(); JMenu 定义的空间都没实现
14、功能 fileMenu = new JMenu(文件);editMenu = new JMenu(编辑);formatMenu = new JMenu(格式);lookMenu = new JMenu(查看);helpMenu = new JMenu(帮助); men uBar.add(fileMe nu);men uBar.add(editMe nu);men uBar.add(formatMe nu);men uBar.add(lookMe nu);men uBar.add(helpMe nu);GridBagLayout layout = new GridBagLayout(); / 设
15、成 GridBagLayout 布局 GridBagC on stra ints con stra ints = new GridBagC on stra in ts();this.setFo nt(n ew Fon t(Sa nsSerif, Fon t.PLAIN, 14);this.setLayout(layout);this.setTitle(”万年历);/设定标题this.setIc onl mage (new ImageIc on (restitle.jpg).getlmage(); /设定图标co nstrai nts.fill = GridBagCo nstrai nts.BO
16、TH;con strai nts.weightx = 0.5;con stra in ts.weighty = 0.5;layout.setC on stra in ts(listPa nel, con stra in ts);con strai nts.weightx = 8.0;con stra in ts.weighty = 0.5;layout.setC on stra in ts(tablePa nel, con stra in ts);this.setJMe nuBar(me nuBar);this.add(listPa nel);this.add(tablePa nel);thi
17、s.setSize(this.getToolkit().getScree nSize().width * 3 / 4, this .getToolkit().getScree nSize().height * 3 / 4); /设定窗体的大小private void showTime()int hour = Cale ndar.getl nsta nce().get(Cale ndar.HOUR_OF_DAY);int mi nute = Cale ndar.getl nsta nce().get(Cale ndar.MINUTE);int seco nd = Cale ndar.getl n
18、sta nce().get(Cale ndar.SECOND);Strin gBuilder sb = new Stri ngBuilder();if (hour 10)sb.appe nd(0 + hour); elsesb.appe nd(hour);if (mi nute 10)sb.appe nd(:0 + minu te); elsesb.appe nd(: + minu te);if (second 10)sb.appe nd(:O + sec on d); elsesb.appe nd(: + sec on d);label.setFo nt(new Fon t(Sa nsSer
19、if, Fon t.BOLD, 12);label.setForegrou nd(Color.BLACK); label.setText(sb.toStri ng();class MyTableModel exte nds AbstractTableModel / 表格模型类,提供表格数据 private static final long serialVersionUID = 1L;Strin g colu mnN ame = new Strin g/表格列名 Sunday, Monday, Tuesday, Wednesday, Thursday, Friday,Saturday ;Ove
20、rridepublic in t getColu mn Cou nt() / 返回表格列数return colu mnN ame.le ngth;public in t getRowCou nt() / 返回表格行数return 6;public String getColumnName(int col) /获得表格列名return colu mnN amecol;public Class getColu mn Class(i nt c)return getValueAt(0, c).getClass();public Object getValueAt( int row In dex, in
21、t colu mnIn dex)int mon th = list.getSelectedl ndex(); 获得列表的月份int year = (Integer) spinner.getValue(); 获得 spinner 显示的年份Gregoria nCale ndar gc = new Gregoria nCale ndar(year, mon th, 1);int dayOfWeek = gc.get(Cale ndar.DAY_OF_WEEK) - 1; /获得这个月的第一天是星期几int countDayInMonth = 0;/ 某月的总天数,这里的月是从0-11,表示1-12
22、月if (mon th = 0 | mon th = 2 | month = 4 | mon th = 6| month = 7 | month = 9 | month = 11)countDaylnMonth = 31; / 是 31 天的月份 else if (month = 3 | month = 5 | month = 8 | month = 10)countDaylnMonth = 30; / 是 30 天的月份 else if (gc.isLeapYear(year) & month = 1)countDaylnMonth = 29; / 闰年 2 月 else if (!gc.i
23、sLeapYear(year) & month = 1)countDaylnMonth = 28; / 非闰年 2 月String value = ; /因为返回值是 Object类型,所以不能直接返回int类型的数据,所以转换成String类型if (rowl ndex = 0) / 第一列的数据if (colum nln dex dayOfWeek)value =; elsevalue = + (colu mnln dex - dayOfWeek + 1); else/其余列的数据if (rowl ndex - 1) * 7) + (colu mnln dex + 1 + 7 - dayO
24、fWeek) = cou ntDayl nMonth) value = (rowl ndex - 1) * 7) + (colu mnlndex + 1 + 7 - dayOfWeek)+ ;return value;列表元素绘制类继承class MyListCelIRe nderer exte nds JLabel impleme nts ListCelIRe nderer/ 自 JLabel,实现 ListCellRenderer 接口private static final long serialVersionUID = 1L;public Comp onent getListCellR
25、e ndererComp onen t(JList list, / the list Object value, / value to display int in dex, / cell in dex boolea n isSelected, / is the cell selectedboolea n cellHasFocus) / does the cell have focusStri ng s = value.toStri ng().trim(); / 获取选中元素的字符容 setText(s); /显示这个字符Dime nsion dime nsion = list.getSize
26、(); / 设定这个每个元素的大小 int height = dime nsion .height / 12;int width = dime nsio n.width;setSize(width, height);if (isSelected) /如果该元素被选中,则背景色为红色setBackgro un d(Color.red);setForegro un d(list.getSelect ion Backgro un d(); else/未被选中的元素背景色显示为灰色,前景色为粉红色setBackgro un d(Color.gray);setForegro un d(Color.p i
27、n k);setIcon(new ImageIcon(resWmon .jpg); / 设定该元素的图标 setE nabled(list.isE nabled();setFont(new Font(SansSerif, Font.PLAIN, 20); /设定字体大小setOpaque(true);return this;class MyTableRe nderer exte nds JLabel impleme nts TableCellRe nderer private static final long serialVersionUID = 1L;public Comp onent getTableCe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业办公墙纸装饰协议
- 商场摊位租赁合同:鲜花绿植租赁
- 市场营销总监聘用协议律师
- 假山医院景观施工合同
- 酒店清水池防水施工合同
- 海南省博物馆聘用合同指南
- 皮革行业合同管理样本
- 智能医疗弱电综合布线施工合同
- 眼镜专柜租赁合同模板
- 商务中心会议厅翻新合同
- 新《双眼视觉学》考试复习题库(含答案)
- 心理健康教育主题班会(29张)课件
- 霍尔与无刷电机正反转控制笔记
- 参展商实务(第三版)第二章企业参展相关程序
- 在全市母婴安全形势分析会上的讲话
- 文华财经程序化交易初级篇
- 世界地理高中世界地理填图练习
- 连续梁施工质量通病及防治
- 羽毛球运动的教学理论与方法
- 海运提单背面条款英文原版
- GB 37489.3-2019 公共场所设计卫生规范 第3部分:人工游泳场所(高清版)
评论
0/150
提交评论