实验三图形用户界面设计(汽院含答案)

上传人:小** 文档编号:46882415 上传时间:2021-12-16 格式:DOC 页数:17 大小:238KB
收藏 版权申诉 举报 下载
实验三图形用户界面设计(汽院含答案)_第1页
第1页 / 共17页
实验三图形用户界面设计(汽院含答案)_第2页
第2页 / 共17页
实验三图形用户界面设计(汽院含答案)_第3页
第3页 / 共17页
资源描述:

《实验三图形用户界面设计(汽院含答案)》由会员分享,可在线阅读,更多相关《实验三图形用户界面设计(汽院含答案)(17页珍藏版)》请在装配图网上搜索。

1、实验三图形用户界面设计实验目的1. 掌握Java语言中GUI编程的基本方法2. 掌握Java语言中AWT组件的基本用法3. 掌握Java语言中Swing组件的基本用法实验导读1. 通过图形用户界面(GUI: Graphics User In terface),用户和程序之间可以方便地进行 交互。AWT(Abstract Windowing Toolkit),中文译为抽象窗口工具包, 是Java提供的用来建立和 设置Java的图形用户界面的基本工具。 AWT由Java中的java.awt包提供,里面包含了许多 可用来建立与平台无关的图形用户界面 (GUI)的类,这些类又被称为组件 (compon

2、ents)。Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用 Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。JDK写程序所有功能都是靠虚拟机去操作本地操作系统。比如window下,就是JDK用windows API实现功能。而awt包中很多组件是组件自身去调用本地操作系统代码swing包中的组件采用的是调用本地虚拟机方法,由虚拟机再调用本地操作系统代码。 意思就是中间多了一层,这样就加强了swing包的移植性,与本地关系不那强了。Ccnipanc

3、titButtonContainerI abelZZI'RuneWindowDialogPanelClicuklmxrexlCuinH)ricriibileDialog1 ext AreaTexil itldL 一图3.1 AWT常用组件继承关系图Container为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。2.布局,容器中的组件的排放方式。常见的布局管理器:FlowLayout (流式布局管理器):从左到右的顺序排列。Panel默认的布局管理器。BorderLayout (边界布局管理器):东,南,西,北,中。Frame默认的布局管理器。GridLayout

4、 (网格布局管理器):规则的矩阵CardLayout (卡片布局管理器):选项卡GridBagLayout (网格包布局管理器):非规则的矩阵3. 类 JFrame 是 java.awt.Frame 的扩展版本,该版本添加了对 JFC/Swing 组件架构的 支持,常用方法如下:1) JFrame() 该构造方法可以创建一个无标题的窗口,窗口的默认布局为 BorderLayout 布局。2) JFrame(String s) 该构造方法可以创建一个标题为 s 的窗口,窗口的默认布局 为 BorderLayout 布局。3) public void setBounds(int a,int b,i

5、nt width,int height) 窗口调用该方法可以设置出现在屏幕上时的初始位置是(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是 width ,高是 height。4) public void setSize(int width,int height) 设置窗口的大小, 窗口在屏幕出现是默 认位置是 (0,0)。5) public void setVisible(boolean b) 设置窗口是可见还是不可见,窗口默认是不 可见的。6) public void setResizable(boolean b) 设置窗口是否可调整大小, 窗口默认是可调 整大小的。7) p

6、ublic void setDefaultCloseOperation(int operation) 设置用户在此窗体上发起 "close" 时默认执行的操作。8) public void setLocationRelativeTo(Component c) 设置窗口相对于指定组件的位置。如果组件当前未显示,或者c为null,则此窗口将置于屏幕的中央。实验内容1. 图形用户界面设计程序 (ArtFont.java) 要求:设计一个文字字体设置窗体,在该窗体中可以设置要显示文字的字体内容, 包括字体名称、 字体大小、 粗体和斜体等字体风格。 并模拟在不同操作系统下的显示效 果

7、。程序的最终显示效果如下:提示:整个窗体继承于 JFrame,采用BorderLayout布局。在窗体中添加三个JPanel:northPanel、 centerPanel 和 southPanel ,分别位于窗体的北部、中部和南部,然后分 别在各个面板中添加其它组件,并逐步完善程序功能。请按以下步骤完成程序设计:1)新建ArtFont类,该类用于显示主界面。其主要代码如下:public class ArtFontexte nds JFrame JComboBoxJComboBoxJComboBoxfontType; /字体样式下拉框,fontSize; /字体大小下拉框windowStyle

8、; /窗体样式下拉框JCheckBoxJCheckBoxboldBx ; /粗体按钮italicBx ; /斜体按钮JButton colorBtn ; / 颜色按钮;StringfontNames ; / 字体名称;StringfontSizes; / 字体大小;JLabel label ; / 输入提示标签;JTextField inputText ; / 文字输入框;JTextArea txtAreaJPa neln orthPa nelJPa nelcen terPa nelJPa nelsouthPa nel;/文字显示区;/字体设置;;/显示效果区;/样式设置Font font ;

9、int boldStyle , italicStyle , un derli neStyle;intfon tSizeStyle;Stri ngfon tNameStyle;Color colorStyle = Color. black ; /设置字体的默认颜色为黑色Stringstyle = "默认显示效果","Windows 显示效果","Unix显示效果"public ArtFo nt() super ("字体设置");/ 设置默认字体 boldStyle = 0;italicStyle = 0; under

10、lineStyle = 0; fontSizeStyle= 10;fontNameStyle= " 宋体 " ;boldStyle +font = new Font( fontNameStyle italicStyle , fontSizeStyle );northPanel centerPanel southPanel / 设置容器 ;Container container = getContentPane(); container.setLayout( 【补充代码】 【补充代码】 【补充代码】= getNorthPanel();= getCenterPanel(); =

11、 getSouthPanel();new / 将 northPanel / 将 centerPanel / 将 southPanelBorderLayout(); 添加到窗体的北部 添加到窗体的北部 添加到窗体的北部setSize(500, 300);【补充代码】 / 将窗体位于屏幕的中央 setVisible( true ); private JPanel getNorthPanel() JPanel panel =new JPanel();return panel;private JPanel getCenterPanel() JPanel panel =new JPanel();retu

12、rn panel;new JPanel();private JPanel getSouthPanel() JPanel panel = return panel;main(String args) new ArtFont(); public static voidArtFont artFont =artFont.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE );2) 根据 ArtFont 类代码和程序界面图设计北部面板northPanel:private JPanel getNorthPanel() JPanel panel = new JPan

13、el();【补充代码】returnpan el;3) 根据ArtFont类代码和程序界面图设计中部面板centerPanel:privateJPa nel getCe nterPa nel() JPa nel panel = new JPa nel();【补充代码】retur npan el;4) 根据ArtFont类代码和程序界面图设计南部面板southPanel:privateJPa nel getSouthPa nel() JPa nel panel = new JPa nel();/获得系统默认字体GraphicsE nviro nment ge =GraphicsE nvir onm

14、ent.getLocalGraphicsE nviro nment();fon tNames= ge.getAvailableF on tFamilyNames();fon tType= new JComboBox( fon tNames );/设置字体大小fon tSizes= new Strin g63;for ( int i = 0; i <fontSizes. length ; i+) fon tSizesi = In teger.toStri ng (i+10);【补充代码】retur npan el;5) 调试、编译和运行程序,并显示正确界面。答案:import javax.

15、swi ng.*;import java.awt.*;public class ArtFont extends JFrame JComboBox fontType ; /字体样式下拉框, JComboBox fontSize ; /字体大小下拉框 JComboBox windowStyle ; / 窗体样式下拉框JCheckBox boldBx ; / 粗体按钮 JCheckBox italicBx ; / 斜体按钮 JButton colorBtn ; / 颜色按钮; StringfontNames ; / 字体名称;StringfontSizes ; / 字体大小;JLabel label

16、 ; / 输入提示标签;JTextFieldinputText; / 文字输入框;/文字显示区;/字体设置;;/显示效果区;II样式设置JTextArea txtAreaJPa nel n orthPa nelJPa nel cen terPa nelJPa nel southPa nelFont font ;int boldStyle , italicStyle , un derli neStyle ;int fon tSizeStyle ;Stri ngfon tNameStyle ;Color colorStyle = Color. black ; / 设置字体的默认颜色为黑色;Stri

17、ngstyle = "默认显示效果","Windows显示效果","Unix显示效果"public ArtFo nt() super ("字体设置");/设置默认字体boldStyle = 0; italicStyle = 0;un derli neStyle = 0;fon tSizeStyle= 10;fontNameStyle="宋体”;font = new Font( fontNameStyle, boldStyle + italicStylefon tSizeStyle );n orthPa n

18、el= getNorthPa nel();cen terPa nel= getCe nterPa nel();southPa nel = getSouthPa nel();/设置容器;Container container = getC onten tPa ne();contain er.setLayout( new BorderLayout();NORTH /【补充代码】/将CENTER; /【补充代码】SOUTH; /【补充代码】/contain er.add(n orthPa nel ,BorderLayout.northPa nel添加到窗体的北部contain er.add(cen

19、terPa nel ,BorderLayout./将centerPanel添加到窗体的北部contain er.add(southPa nel ,BorderLayout.将southPa nel添加到窗体的北部setSize(500, 300);/【补充代码】/将窗体位于屏幕的中央setLocationRelativeTo(null );setVisible( true ); private JPa nel getNorthPa nel() JPa nel panel =new JPa nel();label = new JLabel("输入",JLabel. LEFT)

20、;/设置输入提示标签panel.add(label );/设置文本输入框;in putText =n ew JTextField(IO);pan el.add(in putText );/in putText.addAct ion Liste ner(this);boldBx =new JCheckBox("粗体”);panel.add(boldBx );italicBx=new JCheckBox("斜体");pan el.add(italicBx);colorBtn =new JButton("颜色”); pan el.add(colorBt n )

21、;return pan el;privateJPa nel getCe nterPa nel() JPa nel panel =new JPa nel();pan el.setLayout( new BorderLayout();txtArea =new JTextArea();pan el.add( txtArea ,BorderLayout. CENTER return pan el;privateJPa nel getSouthPa nel() JPa nel panel =new JPa nel();GraphicsE nviro nment ge=GraphicsE nvir onm

22、ent.getLocalGraphicsE nvir onment();fon tNames =ge.getAvailableF on tFamilyNames();/ 获得系统中所有字体的名字;fontType =new JComboBox( fontNames );fontType .setEditable( false );fontType .setMaximumRowCount(1O);pan el.add(fon tType );fontSizes =new String63;for (int i=0;i<63;i+)fon tSizesi=I nteger.toStri ng

23、(i+10); fontSize =new JComboBox( fontSizes 二fontSize.setEditable( false );fon tSize.setMaximumRowCou nt(1O);pan el.add( fon tSize );windowStyle = new JComboBox( style );pan el.add( win dowStyle ); return pan el;public static void main( Stri ng args) ArtFont artF ont =new ArtF on t();EXIT_ON_CLOSE);a

24、rtF on t.setDefaultCloseOperati on( JFrame.2.日历应用程序设计编写一个应用程序,设计一个窗体,该窗体为BorderLayout布局。窗体的中心添加一个Panel容器:Panel容器的布局是 7行7列的GridLayout布局,Panel容器中放置 49个标签,用来显示日历。窗口的北面添加一个Panel容器,其布局是 FlowLayout布局,Panel容器中放置两个按钮:nextMonth和previousMonth。窗口的南面添加一个Panel容器,其布局是FlowLayout,Panel容器中放置一个标签用来显示一些信息。国日历应用程序H 回请输

25、入年饴:上目.卜月.日二三1«!«L3四I)67182g310斗1151213141516171819202122232斗252627283031请按以下步骤完成程序设计:1) 编写CalendarBean类,实现日期类: public class Cale ndarBea n String day ;int year = 2013,mon th = 0;publicvoid setYear(int year) this . year = year;public int getYear() return year ;public void setM on th(int mo

26、n th) this . mon th = mon th;public int getMonth() return month ;/ 返回某年某月 1 号开始的日期数组 public String getCalendar() String a = new String42; Calendar 日历 = Calendar. getInstance (); / 注意: 1月份是从 0 开始,所以要减 1 日历 .set( year , month - 1, 1);int int if星期几 = day = 0;( month =日历 .get(Calendar.DAY_OF_WEEK) - 1&g

27、t;month= 1 |month = 3 |month= 5 |7 |month = 8|month = 10 |month = 12) day = 31;Jif( month = 4 |month = 6 |month= 9 |month11) 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+) ai = String. v

28、alueOf (n);n+;return a;2) 补充代码,完成日历窗体界面类设计: public class CalendarFrame extends Frame Label labelDay = new Label42;Label labelYear ;Button titleName = new Button7;Button nextMonth , previousMonth ;Label showMessage ;TextField inputYear ; CalendarBean calendar ;String name = " 日", " 一&q

29、uot;, " 二", " 三", "四", "五", "六" ;int year = 2013, month = 1; String days ;public CalendarFrame() calendar = new CalendarBean(); calendar .setYear( year ); calendar .setMonth( month ); days = calendar .getCalendar();ScrollPane scrollPane =new ScrollPa

30、ne();scrollPane.add(getCenterPanel();【补充代码】 / 窗口添加 scrollPane 在中心区域 【补充代码】 / 窗口添加 pNorth 在北面区域 【补充代码】 / 窗口添加 pSouth 在南区域。private Panel getNorthPanel() Panel panel = new Panel();【补充代码】return panel;private Panel getCenterPanel() Panel panel = new Panel();布局【补充代码】/ 将panel的布局设置为7行7列的GridLayout for ( int

31、 i = 0; i < 7; i+) titleName i = new Button( namei);【补充代码】 / panel添加组件 titleNamei 。for ( int i = 0; i < 42; i+) labelDay i = new Label( "" , Label. CENTER); 【补充代码】 / panel添加组件 labelDayi 。for ( int i = 0; i < 42; i+) labelDay i.setText( days i);return panel;private Panel getSouthPa

32、nel() Panel panel = new Panel();【补充代码】return panel;3) 设计主应用程序类:public class Cale ndarMa in Class public static void main( Stri ng args) Cale ndarFrame frame =new Cale ndarFrame();frame.setTitle("日历应用程序”);frame.setBounds(100, 100, 360, 300);frame.setVisible(true );frame.validate();4) 调试、编译和运行程序,

33、并显示正确界面。CalendarBean.javaimport java.util.Calendar;public class CalendarBean String day ;int year = 2013, mon th = 0;public void setYear( int year) this . year = year;public int getYear() returnyear ;public void setM on th(int mon th) this . mon th = mon th;public int getMonth() return mon th ;/返回某年

34、某月1号开始的日期数组public Stri ng getCale ndar() Stri ng a =new Strin g42;Cale ndar日历=Cale ndar.get In sta nee();/注意:1月份是从0开始,所以要减1日历.set( year , mon th - 1, 1);int 星期几=日历.get(Calendar.DAY_OF_WEE»K 1;int day = 0;if ( month = 1 |mon th = 3 | month = 5 | month = 7 | month=8 |mon th = 10 | mon th = 12) da

35、y = 31;11) % 400 =if ( mon th = 4 | month = 6 |mon th = 9 | month =day = 30;if ( mon th = 2) if ( year % 4 = 0) && ( year % 100 != 0) | ( year 0) day = 29; else day = 28;for ( int i = 星期几,n = 1; i <星期几 + day; i+) ai = String. valueOf (n);n+;return a;Cale ndarFrame.javaimport java.awt.*;im

36、port java.awt.event.*;import javax.swi ng.*;public class Cale ndarFrameexte nds JFrame impleme ntsActio nListe ner,KeyListe ner/*/privatestatic finallong serialVersio nUID= 1L;LabellabelDay =new Label42;LabellabelYear ;ButtontitleName =new Butto n 7;ButtonnextMonth ,previousM onth ;LabelshowMessage;

37、TextFieldin putYear5Cale ndarBea ncale ndar ;Stri ngn ame = "日","二","三","四","五","六int year = 2013,mon th = 1;Stringdays 1;publicCale ndarFrame() cale ndar = new Cale ndarBea n(); calendar .setYear( year );cale ndar .setM on th(mon th);days = cal

38、e ndar .getCale ndar();ScrollPa ne scrollPa ne =new ScrollPa ne();scrollPa ne.add(getCe nterPa nel();add( "Center" ,scrollPane); / 【补充代码】/ 心区域add(getNorthPa nel(),BorderLayout.NORTH加pNorth在北面区域add(getSouthPa nel(),BorderLayout.SOUTH加pSouth 在南区域。窗口添加scrollPane 在中/【补充代码】/窗口添/【补充代码】/窗口添privat

39、e Pa nel getNorthPa nel() Panel panel =new Pan el();/【补充代码】pan el.setLayout( new FlowLayout(FlowLayout.CENTER10,5);showMessage = new Label("请输入年份:"); in putYear =new TextField(8);previousMonth =new Button("上月”); nextMonth =new Button(” 下月”);panel.add( showMessage );pan el.add( in putY

40、ear );pan el.add(previousM onth);panel.add(nextMonth );return pan el;private Panel getCe nterPa nel() Panel panel =new Pan el();pan el.setLayout(new GridLayout(7,7); /布局设置为7行7列的GridLayout 布局for ( int i = 0; i < 7; i+) titleName i = new Butt on(n amei);pa nel.add( titleName i);/ 【补充代码】titleNamei 。

41、for (int i = 0; i < 42; i+) 【补充代码】/将panel的/ pan el添加组件labelDay i = new Label( "" , Label. CENTERpanel.add(labelDay i);/ 【补充代码】/ panel添加组件labelDayi 。for ( int i = 0; i < 42; i+) labelDay i.setText( days i);return pan el;private Panel getSouthPa nel() CalendarMainClass.javaimport java.

42、awt.*;import javax.swi ng.*;public class Cale ndarFrame exte nds JFrame /*/private static final long serialVers ion UID= 1L;Label labelDay = new Label42;Label labelYear ;Butt on titleName =new Butto n 7;Butt onn extM onth , previousM onth;Label showMessage;TextField in putYear ;Cale ndarBea n cale n

43、dar ;Stri ng n ame = "日","一","二","三","四","五","六"int year = 2013, mon th = 1;String days ;public Cale ndarFrame() cale ndar = new Cale ndarBea n();calendar .setYear( year );cale ndar .setM on th(mon th);days = cale ndar .getCale nd

44、ar();ScrollPa ne scrollPa ne =new ScrollPa ne();scrollPa ne.add(getCe nterPa nel();在中add( "Center" ,scrollPane); / 【补充代码】/ 窗口添力口 scrollPane 心区域add(getNorthPanel(),BorderLayout.NORTH 【补充代码】/ 窗口添加pNorth 在北面区域add(getSouthPanel(),BorderLayout.SOUTH / 【补充代码】/ 窗口添加pSouth 在南区域。privatePa nel getNo

45、rthPa nel() Panel panel =new Pan el();/【补充代码】pa nel.setLayout(new FlowLayout(FlowLayout.CENTE&0,5);showMessage = new Label("请输入年份:");in putYear =new TextField(8);previousMonth=new Button("上月”);nextMonth =new Button(” 下月”);panel.add( showMessage );pan el.add( in putYear );pan el.ad

46、d( previousM onth );panel.add( nextMonth );return pan el;privatePanel getCe nterPa nel() Panel panel =new Pan el();panel.setLayout(new GridLayout(7,7); / 【补充代码】/ 将 panel 的布局设置为7行7列的GridLayout 布局for ( int i = 0; i < 7; i+) titleName i =new Butt on(n amei);pa nel.add(titleName i);/ 【补充代码】/ pan el添加

47、组件titleNamei 。for (int i = 0; i < 42; i+) labelDay i = new Label( "" , Label.CENTER;panel.add(labelDay i);/ 【补充代码】/ panel 添加组件labelDayi 。for (int i = 0; i < 42; i+) labelDay i.setText( days i);return pan el;private Panel getSouthPa nel() Panel panel =new Pan el();/panel.setLayout(new FlowLayout(FlowLayout.CENTER);labelYear =new Label("月份:"+calendar .getYear()+ "年 "+calendar .getMonth()+ "月");panel.add( labelYear ); / 【补充代码】returnpan el;实验总结请书写你对本次实验有哪些实质性的收获和体会,以及对本次实验有何良好的建议?

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!