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

下载本文档

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

文档简介

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

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

3、,与本地关系不那强了。图 3.1 AWT 常用组件继承关系图Container 为容器,是一个特殊的组件,该组件中可以通过add 方法添加其他组件进来。2.布局,容器中的组件的排放方式。常见的布局管理器:FlowLayout(流式布局管理器) :从左到右的顺序排列。Panel 默认的布局管理器。BorderLayout (边界布局管理器) :东,南,西,北,中。Frame 默认的布局管理器。GridLayout (网格布局管理器) :规则的矩阵.CardLayout(卡片布局管理器) :选项卡GridBagLayout(网格包布局管理器) :非规则的矩阵3.类 JFrame 是 java.aw

4、t.Frame的扩展版本,该版本添加了对JFC/Swing 组件架构的支持,常用方法如下:1) JFrame() 该构造方法可以创建一个无标题的窗口,窗口的默认布局为BorderLayout 布局。2)JFrame(String s)该构造方法可以创建一个标题为s 的窗口,窗口的默认布局为 BorderLayout 布局。3)public void setBounds(int a,int b,int width,int height)窗口调用该方法可以设置出现在屏幕上时的初始位置是(a,b),即距屏幕左面a 个像素、 距屏幕上方 b 个像素;窗口的宽是 width ,高是 height 。4)

5、public void setSize(int width,int height)设置窗口的大小, 窗口在屏幕出现是默认位置是 (0,0)。5) public void setVisible(boolean b) 设置窗口是可见还是不可见,窗口默认是不可见的。6)public void setResizable(boolean b)设置窗口是否可调整大小,窗口默认是可调整大小的。7) public void setDefaultCloseOperation(int operation) 设置用户在此窗体上发起close 时默认执行的操作。8) public void setLocationRe

6、lativeTo(Component c) 设置窗口相对于指定组件的位置。 如果组件当前未显示,或者c 为 null ,则此窗口将置于屏幕的中央。实验内容1. 图形用户界面设计程序 (ArtFont.java)要求:设计一个文字字体设置窗体,在该窗体中可以设置要显示文字的字体内容,包括字体名称、 字体大小、 粗体和斜体等字体风格。并模拟在不同操作系统下的显示效果。程序的最终显示效果如下:提示:整个窗体继承于JFrame,采用 BorderLayout 布局。在窗体中添加三个JPanel:northPanel、 centerPanel和 southPanel ,分别位于窗体的北部、中部和南部,然

7、后分别在各个面板中添加其它组件,并逐步完善程序功能。.请按以下步骤完成程序设计:1) 新建 ArtFont 类,该类用于显示主界面。其主要代码如下:publicclassArtFontextendsJFrame JComboBoxfontType; /字体样式下拉框 ,JComboBoxfontSize; /字体大小下拉框JComboBoxwindowStyle; /窗体样式下拉框JCheckBoxboldBx; /粗体按钮JCheckBoxitalicBx; /斜体按钮JButtoncolorBtn; /颜色按钮;StringfontNames; /字体名称 ;StringfontSizes

8、; /字体大小;JLabellabel; /输入提示标签;JTextFieldinputText; /文字输入框;JTextAreatxtArea; /文字显示区 ;JPanelnorthPanel; /字体设置;JPanelcenterPanel; /显示效果区JPanelsouthPanel; /样式设置Fontfont;intboldStyle, italicStyle,underlineStyle;intfontSizeStyle;StringfontNameStyle;ColorcolorStyle= Color.black; /设置字体的默认颜色为黑色 ;Stringstyle=

9、默认显示效果 ,Windows显示效果 , Unix显示效果 ;publicArtFont() super( 字体设置 );./ 置默 字体boldStyle= 0;italicStyle= 0;underlineStyle= 0;fontSizeStyle= 10;fontNameStyle= 宋体 ;font=new Font(fontNameStyle, boldStyle+italicStyle,fontSizeStyle);northPanel= getNorthPanel();centerPanel= getCenterPanel();southPanel= getSouthPan

10、el();/ 置容器 ;Container container = getContentPane();container.setLayout(new BorderLayout();【 充代 】 / 将northPanel添加到窗体的北部【 充代 】 / 将centerPanel添加到窗体的北部【 充代 】 / 将southPanel添加到窗体的北部setSize(500, 300);【 充代 】 / 将窗体位于屏幕的中央setVisible(true);privateJPanel getNorthPanel() JPanel panel =new JPanel();returnpanel;pr

11、ivateJPanel getCenterPanel() JPanel panel =new JPanel();returnpanel;privateJPanel getSouthPanel() JPanel panel =new JPanel();returnpanel;publicstaticvoidmain(String args) ArtFont artFont =new ArtFont();artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);2)根据 ArtFont 类代码和程序界面图设计北部面板northPanel:priv

12、ateJPanel getNorthPanel() JPanel panel =new JPanel();【 充代 】.returnpanel;3)根据 ArtFont 类代码和程序界面图设计中部面板centerPanel:privateJPanel getCenterPanel() JPanel panel =new JPanel();【 充代 】returnpanel;4)根据 ArtFont 类代码和程序界面图设计南部面板southPanel:privateJPanel getSouthPanel() JPanel panel =new JPanel();/ 得系 默 字体Graphic

13、sEnvironment ge =GraphicsEnvironment.getLocalGraphicsEnvironment();fontNames= ge.getAvailableFontFamilyNames();fontType=new JComboBox(fontNames);/ 置字体大小fontSizes=new String63;for(inti = 0; i fontSizes. length; i+) fontSizesi = Integer.toString(i+10);【 充代 】returnpanel;5) 调试、编译和运行程序,并显示正确界面。答案:importj

14、avax.swing.*;importjava.awt.*;publicclassArtFontextendsJFrame JComboBox fontType; / 字体 式下拉框,JComboBox fontSize; / 字体大小下拉框JComboBox windowStyle; / 窗体 式下拉框JCheckBoxboldBx ; /粗体按 JCheckBox italicBx; /斜体按 JButtoncolorBtn; / 色按 ;StringfontNames ; /字体名称 ;StringfontSizes; /字体大小;JLabellabel ; / 入提示 ;.JTextF

15、ieldinputText; /文字输入框;JTextAreatxtArea; /文字显示区 ;JPanel northPanel ; / 字体设置;JPanelcenterPanel; / 显示效果区JPanelsouthPanel; /样式设置Fontfont ;intboldStyle, italicStyle,underlineStyle;intfontSizeStyle;StringfontNameStyle;Color colorStyle= Color.black ; / 设置字体的默认颜色为黑色;Stringstyle= 默认显示效果 ,Windows显示效果 , Unix显示

16、效果 ;publicArtFont() super ( 字体设置 );/设置默认字体boldStyle= 0;italicStyle= 0;underlineStyle= 0;fontSizeStyle= 10;fontNameStyle= 宋体 ;font=new Font(fontNameStyle, boldStyle + italicStyle,fontSizeStyle);northPanel= getNorthPanel();centerPanel= getCenterPanel();southPanel= getSouthPanel();/设置容器 ;Container cont

17、ainer = getContentPane();container.setLayout(new BorderLayout();container.add(northPanel,BorderLayout.NORTH); / / 【补充代码】 / 将northPanel添加到窗体的北部container.add(centerPanel,BorderLayout.CENTER);/【补充代码】/ 将centerPanel添加到窗体的北部container.add(southPanel,BorderLayout.SOUTH);/ 【补充代码】 /将 southPanel 添加到窗体的北部setSiz

18、e(500, 300);/ 【补充代码】 / 将窗体位于屏幕的中央setLocationRelativeTo(null);setVisible(true);privateJPanel getNorthPanel() JPanel panel =new JPanel();label=new JLabel( 输入 ,JLabel.LEFT);/ 设置输入提示标签.panel.add(label);/ 设置文本输入框;inputText=new JTextField(10);panel.add(inputText);/ inputText.addActionListener(this);boldBx

19、 =new JCheckBox( 粗体 );panel.add(boldBx );italicBx=new JCheckBox( 斜体 );panel.add(italicBx);colorBtn=new JButton( 颜色 );panel.add(colorBtn);returnpanel;privateJPanel getCenterPanel() JPanel panel =new JPanel();panel.setLayout(new BorderLayout();txtArea=new JTextArea();panel.add(txtArea,BorderLayout.CEN

20、TER);returnpanel;privateJPanel getSouthPanel() JPanel panel =new JPanel();GraphicsEnvironmentge=GraphicsEnvironment.getLocalGraphicsEnvironment();fontNames =ge.getAvailableFontFamilyNames();/获得系统中所有字体的名字;fontType=new JComboBox( fontNames );fontType.setEditable(false);fontType.setMaximumRowCount(10);

21、panel.add(fontType);fontSizes=new String63;for ( inti=0;i63;i+)fontSizes i=Integer.toString (i+10); fontSize=new JComboBox( fontSizes);fontSize.setEditable(false);fontSize.setMaximumRowCount(10);panel.add(fontSize);windowStyle=new JComboBox( style);panel.add(windowStyle);returnpanel;publicstaticvoid

22、main(String args) .ArtFont artFont =new ArtFont();artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);2. 日历应用程序设计编写一个应用程序,设计一个窗体,该窗体为BorderLayout 布局。窗体的中心添加一个 Panel 容器: Panel 容器的布局是7 行 7 列的 GridLayout 布局, Panel 容器中放置49个标签,用来显示日历。窗口的北面添加一个Panel 容器,其布局是FlowLayout 布局,Panel 容器中放置两个按钮:nextMonth 和 prev

23、iousMonth 。窗口的南面添加一个Panel 容器,其布局是FlowLayout ,Panel 容器中放置一个标签用来显示一些信息。请按以下步骤完成程序设计:1) 编写 CalendarBean 类,实现日期类:publicclassCalendarBean Stringday ;intyear= 2013,month = 0;publicvoidsetYear(intyear) this. year = year;publicintgetYear() returnyear;publicvoidsetMonth(intmonth) this. month= month;.publicin

24、tgetMonth() returnmonth ;/ 返回某年某月 1 号开始的日期数组publicString getCalendar() String a =new String42;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 |

25、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+) ai = String.valueOf(n);n+;returna;2) 补充代码,完成日历窗体界面类设计:publicclassCalendarFrameextendsFrame Lab

26、ellabelDay =new Label42;LabellabelYear;ButtontitleName =new Button7;ButtonnextMonth,previousMonth;LabelshowMessage;TextFieldinputYear;CalendarBeancalendar;Stringname = 日 , 一 , 二 , 三 , 四 , 五 ,.六 ;intyear= 2013,month= 1;Stringdays ;publicCalendarFrame() calendar=new CalendarBean();calendar.setYear(yea

27、r );calendar.setMonth(month );days =calendar.getCalendar();ScrollPane scrollPane =new ScrollPane();scrollPane.add(getCenterPanel();【 充代 】 /窗口添加 scrollPane在中心区域【 充代 】 /窗口添加 pNorth在北面区域【 充代 】 /窗口添加 pSouth在南区域。privatePanel getNorthPanel() Panel panel =new Panel();【 充代 】returnpanel;privatePanel getCente

28、rPanel() Panel panel =new Panel();【 充代 】 / 将panel 的布局 置 7行 7列的 GridLayout 布局 for ( int i = 0; i 7; i+) titleNamei =new Button(namei);【 充代 】 / panel添加 件 titleNamei。for( inti = 0; i 42; i+) labelDayi =new Label( , Label.CENTER);【 充代 】 / panel添加 件 labelDayi。for( inti = 0; i 42; i+) labelDayi.setText(da

29、ys i);returnpanel;privatePanel getSouthPanel() Panel panel =new Panel();【 充代 】returnpanel;.3) 设计主应用程序类:publicclassCalendarMainClass publicstaticvoidmain(String args) CalendarFrame frame =new CalendarFrame();frame.setTitle( 日历应用程序 );frame.setBounds(100, 100, 360, 300);frame.setVisible(true);frame.val

30、idate();4) 调试、编译和运行程序,并显示正确界面。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号开

31、始的日期数组publicString getCalendar() String a =new String42;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

32、 |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+) ai = String.valueOf(n);n+;returna;CalendarFrame.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;public clas

33、s CalendarFrame extends JFrame implements ActionListener,KeyListener/*/privatestaticfinallong serialVersionUID= 1L;LabellabelDay =new Label42;LabellabelYear;ButtontitleName =new Button7;ButtonnextMonth,previousMonth;LabelshowMessage ;TextFieldinputYear;CalendarBeancalendar;Stringname = 日 , 一 , 二 , 三

34、 , 四 , 五 , 六 ;int year= 2013,month= 1;Stringdays ;.publicCalendarFrame() calendar=new CalendarBean();calendar.setYear(year );calendar.setMonth(month );days =calendar.getCalendar();ScrollPane scrollPane =new ScrollPane();scrollPane.add(getCenterPanel();add( Center,scrollPane);/ 【 充代 】 /窗口添加 scrollPan

35、e在中心区域add(getNorthPanel(),BorderLayout.NORTH); / 【 充代 】 /窗口添加 pNorth 在北面区域add(getSouthPanel(),BorderLayout.SOUTH); / 【 充代 】 /窗口添加 pSouth 在南区域。privatePanel getNorthPanel() Panel panel =new Panel();/ 【 充代 】panel.setLayout(new FlowLayout(FlowLayout.CENTER,10,5);showMessage =new Label( 入年份: );inputYear=

36、new TextField(8);previousMonth=new Button( 上月 );nextMonth=new Button( 下月 );panel.add(showMessage );panel.add(inputYear);panel.add(previousMonth);panel.add(nextMonth);returnpanel;privatePanel getCenterPanel() Panel panel =new Panel();panel.setLayout(new GridLayout(7,7);/ 【 充代 】 /将 panel 的布局 置 7行7列的 G

37、ridLayout布局for( inti = 0; i 7; i+) titleNamei =new Button(namei);panel.add(titleNamei);/ 【 充代 】 / panel添加 件titleNamei。for( inti = 0; i 42; i+) .labelDayi =new Label( , Label.CENTER);panel.add(labelDayi);/ 【补充代码】 / panel添加组件labelDayi。for( inti = 0; i 42; i+) labelDayi.setText(days i);returnpanel;priv

38、atePanel getSouthPanel() CalendarMainClass.javaimportjava.awt.*;importjavax.swing.*;publicclassCalendarFrameextendsJFrame /*/privatestaticfinallongserialVersionUID= 1L;LabellabelDay =new Label42;LabellabelYear;ButtontitleName =new Button7;ButtonnextMonth,previousMonth;LabelshowMessage ;TextFieldinputYear;CalendarBeancalendar;Stringname = 日 , 一 , 二 , 三 , 四 , 五 , 六 ;intyear= 2013,month = 1;Stringdays ;publicCalendarFrame() calendar=new CalendarBean();calendar.setYear(year );calendar.setMonth(month );days =calendar.get

温馨提示

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

评论

0/150

提交评论