《2022年实验三--图形用户界面设计.docx》由会员分享,可在线阅读,更多相关《2022年实验三--图形用户界面设计.docx(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品学习资源试验目的试验三图形用户界面设计欢迎下载精品学习资源1. 把握 Java语言中 GUI 编程的基本方法2. 把握 Java语言中 AWT 组件的基本用法3. 把握 Java语言中 Swing 组件的基本用法试验导读1. 通过图形用户界面GUI: Graphics User Interface ,用户和程序之间可以便利地进行交互;AWTAbstract Windowing Toolkit ,中文译为抽象窗口工具包,是 Java 供应的用来建立和设置 Java的图形用户界面的基本工具;AWT 由 Java中的 java.awt 包供应,里面包含了很多可用来建立与平台无关的图形用户界面GU
2、I的类,这些类又被称为组件components ;Swing 是一个用于开发Java 应用程序用户界面的开发工具包;它以抽象窗口工具包AWT为基础使跨平台应用程序可以使用任何可插拔的外观风格;Swing 开发人员只用很少的代码就可以利用Swing 丰富、敏捷的功能和模块化组件来创建文雅的用户界面;JDK写程序 全部功能都是靠虚拟机去操作本地操作系统;比方 window 下,就是 JDK用windows API 实现功能;而 awt 包中很多组件是组件自身去调用本地操作系统代码swing 包中的组件 采纳的是调用本地虚拟机方法,由虚拟机再调用本地操作系统代码;意思就是中间多了一层,这样就加强了s
3、wing 包的移植性,与本地关系不那强了;图 3.1 AWT 常用组件继承关系图Container 为容器,是一个特别的组件,该组件中可以通过add 方法添加其他组件进来;2. 布局,容器中的组件的排放方式;常见的布局治理器:FlowLayout流式布局治理器 :从左到右的次序排列;Panel 默认的布局治理器;BorderLayout 边界布局治理器 :东,南,西,北,中;Frame 默认的布局治理器;GridLayout网格布局治理器 :规章的矩阵欢迎下载精品学习资源CardLayout卡片布局治理器 :选项卡GridBagLayout网格包布局治理器 :非规章的矩阵3. 类 JFrame
4、 是 java.awt.Frame的扩展版本,该版本添加了对JFC/Swing 组件架构的支持,常用方法如下:1) JFrame该构造方法可以创建一个无标题的窗口,窗口的默认布局为BorderLayout 布局;2) JFrameString s该构造方法可以创建一个标题为s 的窗口,窗口的默认布局为 BorderLayout 布局;3) public void setBoundsint a,int b,int width,int height窗口调用该方法可以设置 显现在屏幕上时的初始位置是a,b,即距屏幕左面a 个像素、 距屏幕上方 b 个像素;窗口的宽是width ,高是 height
5、;4) public void setSizeint width,int height设置窗口的大小, 窗口在屏幕显现是默认位置是 0,0;5) public void setVisibleboolean b设置窗口是可见仍是不行见,窗口默认是不行见的;6) public void setResizableboolean b设置窗口是否可调整大小,窗口默认是可调整大小的;7) publicvoid setDefaultCloseOperationintoperation设置用户在此窗体上发起close时默认执行的操作;8) public void setLocationRelativeToCo
6、mponent c 设置窗口相对于指定组件的位置; 假如组件当前未显示,或者c 为 null ,就此窗口将置于屏幕的中心;试验内容1. 图形用户界面设计程序ArtFont.java要求:设计一个文字字体设置窗体,在该窗体中可以设置要显示文字的字体内容,包括字体名称、 字体大小、 粗体和斜体等字体风格;并模拟在不同操作系统下的显示成效;程序的最终显示成效如下:提示:整个窗体继承于 JFrame,采纳 BorderLayout 布局;在窗体中添加三个JPanel: northPanel、centerPanel和 southPanel ,分别位于窗体的北部、中部和南部,然后分别在各个面板中添加其它组
7、件,并逐步完善程序功能;欢迎下载精品学习资源请按以下步骤完成程序设计:1) 新建 ArtFont 类,该类用于显示主界面;其主要代码如下:publicclassArtFontextendsJFrame JComboBoxfontType;/字体样式下拉框,JComboBoxfontSize;/字体大小下拉框JComboBoxwindowStyle; /窗体样式下拉框JCheckBoxboldBx; /粗体按钮JCheckBoxitalicBx; /斜体按钮JButtoncolorBtn; /颜色按钮;StringfontNames;/字体名称 ;StringfontSizes;/字体大小;JL
8、abellabel; /输入提示标签; 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 FontfontNameStyle,boldStyle+italicStyle,fontSizeStyle;northPanel= getNorthPanel; centerPanel= getCenterPanel; southPanel= getSouthPanel;/设置
10、容器 ;Container container = getContentPane; container.setLayoutnew BorderLayout;【补充代码】 /将northPanel添加到窗体的北部【补充代码】 /将centerPanel添加到窗体的北部【补充代码】 /将southPanel添加到窗体的北部setSize500, 300;【补充代码】 /将窗体位于屏幕的中心setVisibletrue; privateJPanel getNorthPanel JPanel panel =new JPanel; returnpanel;privateJPanel getCenterP
11、anel JPanel panel =new JPanel; returnpanel;privateJPanel getSouthPanel JPanel panel =new JPanel; returnpanel;publicstaticvoidmainString args ArtFont artFont =new ArtFont;artFont.setDefaultCloseOperationJFrame.EXIT_ON_CLOSE;2) 依据 ArtFont 类代码和程序界面图设计北部面板northPanel:privateJPanel getNorthPanel JPanel pa
12、nel =new JPanel;【补充代码 】欢迎下载精品学习资源returnpanel;3) 依据 ArtFont 类代码和程序界面图设计中部面板centerPanel:privateJPanel getCenterPanel JPanel panel =new JPanel;【补充代码 】returnpanel;4) 依据 ArtFont 类代码和程序界面图设计南部面板southPanel:privateJPanel getSouthPanel JPanel panel =new JPanel;/获得系统默认字体GraphicsEnvironment ge =GraphicsEnviron
13、ment.getLocalGraphicsEnvironment; fontNames= ge.getAvailableFontFamilyNames; fontType=new JComboBoxfontNames;/设置字体大小fontSizes=new String63;forinti = 0; i fontSizes. length; i+ fontSizesi = Integer.toStringi+10;【补充代码 】returnpanel;5) 调试、编译和运行程序,并显示正确界面;答案:importjavax.swing.*;importpublicjava.awt.*;cla
14、ssArtFontextendsJFrame JComboBox fontTypeJComboBox fontSize; / 字体样式下拉框; / 字体大小下拉框,JComboBox windowStyle; / 窗体样式下拉框JCheckBoxboldBx ; /JCheckBoxitalicBx; /JButton StringStringcolorBtn; /fontNames ; /fontSizes; /粗体按钮斜体按钮颜色按钮;字体名称 ;字体大小;JLabellabel; /输入提示标签;欢迎下载精品学习资源JTextFieldinputText; /文字输入框; JTextAr
15、eatxtArea; /文字显示区 ; JPanelnorthPanel; /字体设置; JPanelcenterPanel; /显示成效区JPanelsouthPanel; / 样式设置Fontfont;intboldStyle,italicStyle,underlineStyle; intfontSizeStyle;StringfontNameStyle;ColorcolorStyle= Color.black ; /设置字体的默认颜色为黑色;Stringstyle= 默认显示成效 , Windows 显示成效 , Unix 显示成效 ;publicArtFont super 字体设置 ;
16、/设置默认字体boldStyle= 0;italicStyle= 0;underlineStyle= 0;fontSizeStyle= 10; fontNameStyle= 宋体 ;font=new FontfontNameStyle,boldStyle+italicStyle,fontSizeStyle;northPanel= getNorthPanel; centerPanel= getCenterPanel; southPanel= getSouthPanel;/设置容器 ;Container container = getContentPane; container.setLayout
17、new BorderLayout;container.addnorthPanel,BorderLayout.NORTH;/ / 【补充代码】 / 将northPanel添加到窗体的北部container.addcenterPanel,BorderLayout.CENTER;/ 【补充代码】/ 将centerPanel添加到窗体的北部container.addsouthPanel,BorderLayout.SOUTH;/ 【补充代码】 /将southPanel添加到窗体的北部setSize500, 300;/ 【补充代码】 / 将窗体位于屏幕的中心setLocationRelativeTonul
18、l; setVisibletrue;privateJPanel getNorthPanel JPanel panel =new JPanel;label=new JLabel 输入 ,JLabel.LEFT;/设置输入提示标签欢迎下载精品学习资源panel.addlabel;/设置文本输入框;inputText=new JTextField10; panel.addinputText;/inputText.addActionListenerthis;boldBx =new JCheckBox 粗体 ; panel.addboldBx ;italicBx=new JCheckBox 斜体 ; p
19、anel.additalicBx;colorBtn=new JButton 颜色 ; panel.addcolorBtn;returnpanel;privateJPanel getCenterPanel JPanel panel =new JPanel;panel.setLayoutnew BorderLayout; txtArea=new JTextArea;panel.addtxtArea,BorderLayout.CENTER; returnpanel;privateJPanel getSouthPanel JPanel panel =new JPanel;GraphicsEnviron
20、mentge=GraphicsEnvironment.getLocalGraphicsEnvironment;fontNames =ge.getAvailableFontFamilyNames;/获得系统中全部字体的名字;fontType=new JComboBox fontNames ; fontType.setEditablefalse; fontType.setMaximumRowCount10; panel.addfontType;fontSizes=new String63; for inti=0;i63;i+fontSizesi=Integer.toStringi+10; font
21、Size=new JComboBox fontSizes; fontSize.setEditablefalse; fontSize.setMaximumRowCount10; panel.addfontSize;windowStyle=new JComboBox style; panel.addwindowStyle;returnpanel;publicstaticvoidmainString args 欢迎下载精品学习资源ArtFont artFont =new ArtFont;artFont.setDefaultCloseOperationJFrame.EXIT_ON_CLOSE;2.日历
22、应用程序设计编写一个应用程序,设计一个窗体,该窗体为BorderLayout 布局;窗体的中心添加一个 Panel 容器: Panel 容器的布局是7 行 7 列的 GridLayout 布局, Panel 容器中放置49个标签,用来显示日历;窗口的北面添加一个Panel 容器,其布局是 FlowLayout 布局,Panel 容器中放置两个按钮: nextMonth 和 previousMonth ;窗口的南面添加一个Panel 容器,其布局是 FlowLayout ,Panel 容器中放置一个标签用来显示一些信息;请按以下步骤完成程序设计:1) 编写 CalendarBean 类,实现日期
23、类:publicclassCalendarBean Stringday ;intyear= 2021,month= 0; publicvoidsetYearintyear this. year= year;publicintgetYear returnyear ;publicvoidsetMonthintmonth this. month= month;欢迎下载精品学习资源publicintgetMonth returnmonth ;/返回某年某月 1 号开头的日期数组publicString getCalendar String a =new String42;Calendar日历 = Ca
24、lendar.getInstance;/ 留意: 1月份是从 0 开头,所以要减 1日历.setyear,month- 1, 1;int星期几 =日历.getCalendar.DAY_OF_WEEK - 1; intday = 0;ifmonth= 1 |month= 3 |month= 5 |month= 7 |month= 8 |month= 10 |month= 12 day = 31;欢迎下载精品学习资源= 11 ifmonth= 4 |month= 6 |month= 9 |monthday = 30;ifmonth= 2 ifyear% 4 = 0& year% 100.=0| y
25、ear%欢迎下载精品学习资源400 = 0 day = 29;else day = 28;欢迎下载精品学习资源forinti =星期几 , n = 1; i 星期几 + day; i+ ai = String.valueOfn;n+;returna;2) 补充代码,完成日历窗体界面类设计:publicclassCalendarFrameextendsFrame LabellabelDay =new Label42;LabellabelYear;ButtontitleName =new Button7; ButtonnextMonth,previousMonth; LabelshowMessag
26、e;TextFieldinputYear;CalendarBeancalendar;Stringname = 日 , 一 , 二 , 三 , 四 , 五 ,欢迎下载精品学习资源六 ;intyear= 2021,month= 1; Stringdays ;publicCalendarFrame calendar=new CalendarBean; calendar.setYearyear ; calendar.setMonthmonth ; days=calendar.getCalendar;ScrollPane scrollPane =new ScrollPane; scrollPane.ad
27、dgetCenterPanel;【补充代码】/窗口添加scrollPane在中心区域【补充代码】/窗口添加pNorth在北面区域【补充代码】/窗口添加pSouth在南区域;privatePanel getNorthPanel Panel panel =new Panel;【补充代码 】returnpanel;privatePanel getCenterPanel Panel panel =new Panel;【补充代码】 /将panel的布局设置为 7行7列的 GridLayout布局forinti = 0; i 7; i+ titleNamei =new Buttonnamei;【补充代码】
28、 / panel添加组件 titleNamei;forinti = 0; i 42; i+ labelDayi =new Label , Label.CENTER;【补充代码】 / panel添加组件 labelDayi;forinti = 0; i 42; i+ labelDayi.setTextdays i;returnpanel;privatePanel getSouthPanel Panel panel =new Panel;【补充代码 】returnpanel;欢迎下载精品学习资源3) 设计主应用程序类:publicclassCalendarMainClass publicstati
29、cvoidmainString args CalendarFrame frame =new CalendarFrame;frame.setTitle 日历应用程序 ;frame.setBounds100, 100, 360, 300; frame.setVisibletrue; frame.validate;4) 调试、编译和运行程序,并显示正确界面;CalendarBean.javaimportjava.util.Calendar;publicclassCalendarBean Stringday ;intyear= 2021,month = 0;publicthispublicvoidse
30、tYearintyear . year= year;intreturngetYear year ;publicthispublicvoidsetMonthintmonth . month = month;intreturngetMonth month ;/ 返回某年某月 1号开头的日期数组publicString getCalendar String a =new String42;Calendar日历 = Calendar.getInstance;/ 留意: 1月份是从 0开头,所以要减 1日历.setyear ,month - 1, 1;int intif星期几 =day = 0;日历 .
31、getCalendar.DAY_OF_WEEK- 1; month = 1 |month = 3 |month = 12 month = 5 |month = 7 |month= 8 |month = 10 |day = 31;欢迎下载精品学习资源if month = 4 |month = 6 |month = 9 |month = 11 day = 30;欢迎下载精品学习资源0 if month = 2 ifyear% 4 = 0 & year% 100 .= 0 | year% 400 =day = 29;elseday = 28;欢迎下载精品学习资源for inti =星期几 , n =
32、 1; i 星期几 + day; i+ ai = String.valueOfn;n+;returna;CalendarFrame.javaimportjava.awt.*; importjava.awt.event.*; importjavax.swing.*;publicclassCalendarFrameextendsJFrameimplements ActionListener,KeyListener/*/privatestaticfinallongserialVersionUID= 1L; LabellabelDay =new Label42;LabellabelYear;Butto
33、n titleName = new Button7; Button nextMonth , previousMonth ; Label showMessage ;TextField inputYear ;CalendarBean calendar ;String name = 日 , 一 , 二 , 三 , 四 , 五 , 六 ; int year = 2021, month = 1;String days ;欢迎下载精品学习资源publicCalendarFrame calendar=new CalendarBean; calendar.setYearyear ; calendar.setM
34、onthmonth ; days =calendar.getCalendar;欢迎下载精品学习资源心区域ScrollPane scrollPane =new ScrollPane; scrollPane.addgetCenterPanel;add Center,scrollPane;/ 【补充代码】 /窗口添加 scrollPane在中NORTH;/【补充代码】 /窗口添SOUTH;/【补充代码】 /窗口添addgetNorthPanel,BorderLayout.欢迎下载精品学习资源加pNorth在北面区域addgetSouthPanel,BorderLayout.加pSouth在南区域;p
35、rivatePanel getNorthPanel Panel panel =new Panel;/ 【补充代码 】panel.setLayoutnew FlowLayoutFlowLayout.CENTER,10,5;showMessage =new Label 请输入年份: ; inputYear=new TextField8;previousMonth=new Button 上月 ; nextMonth=new Button 下月 ;panel.addshowMessage ; panel.addinputYear; panel.addpreviousMonth; panel.addne
36、xtMonth;returnpanel;privatePanel getCenterPanel Panel panel =new Panel;panel.setLayoutnew GridLayout7,7;/ 【补充代码】 /将panel 的布局设置为 7行7列的GridLayout布局for inti = 0; i 7; i+ titleNamei =new Buttonnamei;panel.addtitleNamei;/ 【补充代码】 / panel添加组件titleNamei;for inti = 0; i 42; i+ 欢迎下载精品学习资源labelDayi =new Label
37、, Label.CENTER;panel.addlabelDayi;/ 【补充代码】 / panel添加组件labelDayi;for inti = 0; i 42; i+ labelDayi.setTextdays i;returnpanel;privatePanel getSouthPanel CalendarMainClass.javaimportjava.awt.*; importjavax.swing.*;publicclassCalendarFrameextendsJFrame /*/privatestaticfinallongserialVersionUID= 1L; Label
38、labelDay =new Label42;LabellabelYear;Button titleName = new Button7; Button nextMonth , previousMonth ; Label showMessage ;TextField inputYear ;CalendarBean calendar ;String name = 日 , 一 , 二 , 三 , 四 , 五 , 六 ; int year = 2021, month = 1;String days ;publicCalendarFrame calendar=new CalendarBean; cale
39、ndar.setYearyear ; calendar.setMonthmonth ; days =calendar.getCalendar;ScrollPane scrollPane =new ScrollPane; scrollPane.addgetCenterPanel;add Center,scrollPane;/ 【补充代码】 /窗口添加 scrollPane在中欢迎下载精品学习资源心区域addgetNorthPanel,BorderLayout.NORTH;/【补充代码】 /窗口添加pNorth在北面区域加pSouthaddgetSouthPanel,BorderLayout.在南区域;SOUTH;/【补充代码】 /窗口添privatePanel getNorthPanel Panel panel =new Panel;/ 【补充代码 】panel.setLayoutnew FlowLayoutFlowLayout.CENTER,10,5;showMessage =new Label