实验三-图形用户界面设计(汽院含答案)_第1页
实验三-图形用户界面设计(汽院含答案)_第2页
实验三-图形用户界面设计(汽院含答案)_第3页
实验三-图形用户界面设计(汽院含答案)_第4页
实验三-图形用户界面设计(汽院含答案)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验三图形用户界面设计实验目的掌握Java语言中GUI编程的基本方法掌握Java语言中AWT组件的基本用法掌握Java语言中Swing组件的基本用法实验导读通过图形用户界面(GUI:GraphicsUserInterface),用户和程序之间可以方便地进行交互。AWT(AbstractWindowingToolkit),中文译为抽象窗口工具包,是Java提供的用来建立和设置Java的图形用户界面的基本工具。AWT由Java中的java.awt包提供,里面包含了许多可用来建立与平台无关的图形用户界面(GUI)的类,这些类又被称为组件(components)。Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。JDK写程序所有功能都是靠虚拟机去操作本地操作系统。比如window下,就是JDK用windowsAPI实现功能。而awt包中很多组件是组件自身去调用本地操作系统代码swing包中的组件采用的是调用本地虚拟机方法,由虚拟机再调用本地操作系统代码。意思就是中间多了一层,这样就加强了swing包的移植性,与本地关系不那强了。图3.1AWT常用组件继承关系图Container为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。布局,容器中的组件的排放方式。常见的布局管理器:FlowLayout(流式布局管理器):从左到右的顺序排列。Panel默认的布局管理器。BorderLayout(边界布局管理器):东,南,西,北,中。Frame默认的布局管理器。GridLayout(网格布局管理器):规则的矩阵CardLayout(卡片布局管理器):选项卡GridBagLayout(网格包布局管理器):非规则的矩阵类JFrame是java.awt.Frame的扩展版本,该版本添加了对JFC/Swing组件架构的支持,常用方法如下:JFrame()该构造方法可以创建一个无标题的窗口,窗口的默认布局为BorderLayout布局。JFrame(Strings)该构造方法可以创建一个标题为s的窗口,窗口的默认布局为BorderLayout布局。publicvoidsetBounds(inta,intb,intwidth,intheight)窗口调用该方法可以设置出现在屏幕上时的初始位置是(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是width,高是height。publicvoidsetSize(intwidth,intheight)设置窗口的大小,窗口在屏幕出现是默认位置是(0,0)。publicvoidsetVisible(booleanb)设置窗口是可见还是不可见,窗口默认是不可见的。publicvoidsetResizable(booleanb)设置窗口是否可调整大小,窗口默认是可调整大小的。publicvoidsetDefaultCloseOperation(intoperation)设置用户在此窗体上发起"close"时默认执行的操作。publicvoidsetLocationRelativeTo(Componentc)设置窗口相对于指定组件的位置。如果组件当前未显示,或者c为null,则此窗口将置于屏幕的中央。实验内容图形用户界面设计程序(ArtFont.java)要求:设计一个文字字体设置窗体,在该窗体中可以设置要显示文字的字体内容,包括字体名称、字体大小、粗体和斜体等字体风格。并模拟在不同操作系统下的显示效果。程序的最终显示效果如下:提示:整个窗体继承于JFrame,采用BorderLayout布局。在窗体中添加三个JPanel:northPanel、centerPanel和southPanel,分别位于窗体的北部、中部和南部,然后分别在各个面板中添加其它组件,并逐步完善程序功能。日历应用程序设计编写一个应用程序,设计一个窗体,该窗体为BorderLayout布局。窗体的中心添加一个Panel容器:Panel容器的布局是7行7列的GridLayout布局,Panel容器中放置49个标签,用来显示日历。窗口的北面添加一个Panel容器,其布局是FlowLayout布局,Panel容器中放置两个按钮:nextMonth和previousMonth。窗口的南面添加一个Panel容器,其布局是FlowLayout,Panel容器中放置一个标签用来显示一些信息。请按以下步骤完成程序设计:编写CalendarBean类,实现日期类:publicclassCalendarBean{ Stringday[]; intyear=2013,month=0; publicvoidsetYear(intyear){ this.year=year; } publicintgetYear(){ returnyear; } publicvoidsetMonth(intmonth){ this.month=month; } publicintgetMonth(){ returnmonth; } //返回某年某月1号开始的日期数组 publicString[]getCalendar(){ Stringa[]=newString[42]; Calendar日历=Calendar.getInstance(); //注意:1月份是从0开始,所以要减1 日历.set(year,month-1,1); int星期几=日历.get(Calendar.DAY_OF_WEEK)-1; intday=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(inti=星期几,n=1;i<星期几+day;i++){ a[i]=String.valueOf(n); n++; } returna; }}补充代码,完成日历窗体界面类设计:publicclassCalendarFrameextendsFrame{ LabellabelDay[]=newLabel[42]; LabellabelYear; ButtontitleName[]=newButton[7]; ButtonnextMonth,previousMonth; LabelshowMessage; TextFieldinputYear; CalendarBeancalendar; Stringname[]={"日","一","二","三","四","五","六"}; intyear=2013,month=1; Stringdays[]; publicCalendarFrame(){ calendar=newCalendarBean(); calendar.setYear(year); calendar.setMonth(month); days=calendar.getCalendar(); ScrollPanescrollPane=newScrollPane(); scrollPane.add(getCenterPanel()); 【补充代码】//窗口添加scrollPane在中心区域 【补充代码】//窗口添加pNorth在北面区域 【补充代码】//窗口添加pSouth在南区域。 } privatePanelgetNorthPanel(){ Panelpanel=newPanel(); 【补充代码…】 returnpanel; } privatePanelgetCenterPanel(){ Panelpanel=newPanel(); 【补充代码】//将panel的布局设置为7行7列的GridLayout布局 for(inti=0;i<7;i++){ titleName[i]=newButton(name[i]); 【补充代码】//panel添加组件titleName[i]。 } for(inti=0;i<42;i++){ labelDay[i]=newLabel("",Label.CENTER); 【补充代码】//panel添加组件labelDay[i]。 } for(inti=0;i<42;i++){ labelDay[i].setText(days[i]); } returnpanel; } privatePanelgetSouthPanel(){ Panelpanel=newPanel(); 【补充代码…】 returnpanel; }}设计主应用程序类: publicclassCalendarMainClass{ publicstaticvoidmain(Stringargs[]){ CalendarFrameframe=newCalendarFrame(); frame.setTitle("日历应用程序"); frame.setBounds(100,100,360,300); frame.setVisible(true); frame.validate(); }}调试、编译和运行程序,并显示正确界面。CalendarBean.javaimportjava.util.Calendar;publicclassCalendarBean{ Stringday[]; intyear=2013,month=0; publicvoidsetYear(intyear){ this.year=year; } publicintgetYear(){ returnyear; } publicvoidsetMonth(intmonth){ this.month=month; } publicintgetMonth(){ returnmonth; } //返回某年某月1号开始的日期数组 publicString[]getCalendar(){ Stringa[]=newString[42]; Calendar日历=Calendar.getInstance(); //注意:1月份是从0开始,所以要减1 日历.set(year,month-1,1); int星期几=日历.get(Calendar.DAY_OF_WEEK)-1; intday=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(inti=星期几,n=1;i<星期几+day;i++){ a[i]=String.valueOf(n); n++; } returna; }}CalendarFrame.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassCalendarFrameextendsJFrameimplementsActionListener,KeyListener{ /** * */ privatestaticfinallongserialVersionUID=1L; LabellabelDay[]=newLabel[42]; LabellabelYear; ButtontitleName[]=newButton[7]; ButtonnextMonth,previousMonth; LabelshowMessage; TextFieldinputYear; CalendarBeancalendar; Stringname[]={"日","一","二","三","四","五","六"}; intyear=2013,month=1; Stringdays[]; publicCalendarFrame(){ calendar=newCalendarBean(); calendar.setYear(year); calendar.setMonth(month); days=calendar.getCalendar(); ScrollPanescrollPane=newScrollPane(); scrollPane.add(getCenterPanel()); add("Center",scrollPane);//【补充代码】//窗口添加scrollPane在中心区域 add(getNorthPanel(),BorderLayout.NORTH);//【补充代码】//窗口添加pNorth在北面区域 add(getSouthPanel(),BorderLayout.SOUTH);//【补充代码】//窗口添加pSouth在南区域。 } privatePanelgetNorthPanel(){ Panelpanel=newPanel(); //【补充代码…】 panel.setLayout(newFlowLayout(FlowLayout.CENTER,10,5)); showMessage=newLabel("请输入年份:"); inputYear=newTextField(8); previousMonth=newButton("上月"); nextMonth=newButton("下月"); panel.add(showMessage); panel.add(inputYear); panel.add(previousMonth); panel.add(nextMonth); returnpanel; } privatePanelgetCenterPanel(){ Panelpanel=newPanel(); panel.setLayout(newGridLayout(7,7));//【补充代码】//将panel的布局设置为7行7列的GridLayout布局 for(inti=0;i<7;i++){ titleName[i]=newButton(name[i]); panel.add(titleName[i]);//【补充代码】//panel添加组件titleName[i]。 } for(inti=0;i<42;i++){ labelDay[i]=newLabel("",Label.CENTER); panel.add(labelDay[i]);//【补充代码】//panel添加组件labelDay[i]。 } for(inti=0;i<42;i++){ labelDay[i].setText(days[i]); } returnpanel; } privatePanelgetSouthPanel(){CalendarMainClass.javaimportjava.awt.*;importjavax.swing.*;publicclassCalendarFrameextendsJFrame{ /** * */ privatestaticfinallongserialVersionUID=1L; LabellabelDay[]=newLabel[42]; LabellabelYear; ButtontitleName[]=newButton[7]; ButtonnextMonth,previousMonth; LabelshowMessage; TextFieldinputYear; CalendarBeancalendar; Stringname[]={"日","一","二","三","四","五","六"}; intyear=2013,month=1; Stringdays[]; publicCalendarFrame(){ calendar=newCalendarBean(); calendar.setYear(year); calendar.setMonth(month); days=calendar.getCalendar(); ScrollPanescrollPane=newScrollPane(); scrollPane.add(getCenterPanel()); add("Center",scrollPane);//【补充代码】//窗口添加scrollPane在中心区域 add(getNorthPanel(),BorderLayout.NORTH);//【补充代码】//窗口添加pNorth在北面区域 add(getSouthPanel(),BorderLayout.SOUTH);//【补充代码】//窗口添加pSouth在南区域。 } privatePanelgetNorthPanel(){ Panelpanel=newPanel(); //【补充代码…】 panel.setLayout(newFlowLayout(FlowLayout.CENTER,10,5)); showMessage=newLabel("请输入年份:"); inputYear=newTextField(8); previousMonth=newButton("上月"); nextMo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论