




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验三 图形用户界面设计实验目的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)的类,这些类又被称为组件(components)。Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。 JDK写程序 所有功能都是靠虚拟机去操作本地操作系统。比如window下,就是JDK用windows API实现功能。而awt包中很多组件是组件自身去调用本地操作系统代码swing包中的组件 采用的是调用本地虚拟机方法,由虚拟机再调用本地操作系统代码。意思就是中间多了一层,这样就加强了swing包的移植性,与本地关系不那强了。图3.1 AWT常用组件继承关系图Container为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。2. 布局,容器中的组件的排放方式。常见的布局管理器:FlowLayout(流式布局管理器):从左到右的顺序排列。Panel默认的布局管理器。BorderLayout(边界布局管理器):东,南,西,北,中。Frame默认的布局管理器。GridLayout(网格布局管理器):规则的矩阵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,int 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) public void setDefaultCloseOperation(int operation) 设置用户在此窗体上发起 close 时默认执行的操作。8) public void setLocationRelativeTo(Component c) 设置窗口相对于指定组件的位置。 如果组件当前未显示,或者 c 为 null,则此窗口将置于屏幕的中央。实验内容1. 图形用户界面设计程序(ArtFont.java)要求:设计一个文字字体设置窗体,在该窗体中可以设置要显示文字的字体内容,包括字体名称、字体大小、粗体和斜体等字体风格。并模拟在不同操作系统下的显示效果。程序的最终显示效果如下:提示:整个窗体继承于JFrame,采用BorderLayout布局。在窗体中添加三个JPanel:northPanel、centerPanel和southPanel,分别位于窗体的北部、中部和南部,然后分别在各个面板中添加其它组件,并逐步完善程序功能。请按以下步骤完成程序设计:1) 新建ArtFont类,该类用于显示主界面。其主要代码如下:public class ArtFont extends JFrame JComboBox fontType;/字体样式下拉框, JComboBox fontSize;/字体大小下拉框JComboBox windowStyle;/窗体样式下拉框JCheckBox boldBx;/ 粗体按钮JCheckBox italicBx;/ 斜体按钮JButton colorBtn;/ 颜色按钮;String fontNames;/ 字体名称;String fontSizes;/ 字体大小;JLabel label;/ 输入提示标签;JTextField inputText;/ 文字输入框;JTextArea txtArea;/ 文字显示区;JPanel northPanel;/ 字体设置;JPanel centerPanel;/ 显示效果区JPanel southPanel;/样式设置Font font;int boldStyle, italicStyle, underlineStyle;int fontSizeStyle;String fontNameStyle;Color colorStyle = Color.black;/ 设置字体的默认颜色为黑色;String style = 默认显示效果, Windows显示效果, Unix显示效果 ;public ArtFont() super(字体设置);/ 设置默认字体boldStyle = 0;italicStyle = 0;underlineStyle = 0;fontSizeStyle = 10;fontNameStyle = 宋体;font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle);northPanel = getNorthPanel();centerPanel = getCenterPanel();southPanel = getSouthPanel();/ 设置容器;Container container = getContentPane();container.setLayout(new BorderLayout();【补充代码】/将northPanel添加到窗体的北部【补充代码】/将centerPanel添加到窗体的北部【补充代码】/将southPanel添加到窗体的北部setSize(500, 300);【补充代码】/将窗体位于屏幕的中央setVisible(true);private JPanel getNorthPanel() JPanel panel = new JPanel();return panel;private JPanel getCenterPanel() JPanel panel = new JPanel();return panel;private JPanel getSouthPanel() JPanel panel = new JPanel();return panel;public static void main(String args) ArtFont artFont = new ArtFont();artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);2) 根据ArtFont类代码和程序界面图设计北部面板northPanel:private JPanel getNorthPanel() JPanel panel = new JPanel();【补充代码】return panel;3) 根据ArtFont类代码和程序界面图设计中部面板centerPanel:private JPanel getCenterPanel() JPanel panel = new JPanel();【补充代码】return panel;4) 根据ArtFont类代码和程序界面图设计南部面板southPanel:private JPanel getSouthPanel() JPanel panel = new JPanel();/获得系统默认字体GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();fontNames = ge.getAvailableFontFamilyNames();fontType = new JComboBox(fontNames);/设置字体大小fontSizes = new String63;for (int i = 0; i fontSizes.length; i+) fontSizesi = Integer.toString(i+10);【补充代码】return panel;5) 调试、编译和运行程序,并显示正确界面。答案:import javax.swing.*;import java.awt.*;public class ArtFont extends JFrame JComboBox fontType;/字体样式下拉框, JComboBox fontSize;/字体大小下拉框JComboBox windowStyle;/窗体样式下拉框JCheckBox boldBx;/ 粗体按钮JCheckBox italicBx;/ 斜体按钮JButton colorBtn;/ 颜色按钮;String fontNames;/ 字体名称;String fontSizes;/ 字体大小;JLabel label;/ 输入提示标签;JTextField inputText;/ 文字输入框;JTextArea txtArea;/ 文字显示区;JPanel northPanel;/ 字体设置;JPanel centerPanel;/ 显示效果区JPanel southPanel;/样式设置Font font;int boldStyle, italicStyle, underlineStyle;int fontSizeStyle;String fontNameStyle;Color colorStyle = Color.black;/ 设置字体的默认颜色为黑色;String style = 默认显示效果, Windows显示效果, Unix显示效果 ;public ArtFont() super(字体设置);/ 设置默认字体boldStyle = 0;italicStyle = 0;underlineStyle = 0;fontSizeStyle = 10;fontNameStyle = 宋体;font = new Font(fontNameStyle, boldStyle + italicStyle, fontSizeStyle);northPanel = getNorthPanel();centerPanel = getCenterPanel();southPanel = getSouthPanel();/ 设置容器;Container container = getContentPane();container.setLayout(new BorderLayout();container.add(northPanel,BorderLayout.NORTH);/【补充代码】/将northPanel添加到窗体的北部container.add(centerPanel,BorderLayout.CENTER);/【补充代码】/将centerPanel添加到窗体的北部container.add(southPanel,BorderLayout.SOUTH); /【补充代码】/将southPanel添加到窗体的北部setSize(500, 300);/【补充代码】/将窗体位于屏幕的中央setLocationRelativeTo(null);setVisible(true);private JPanel getNorthPanel() JPanel panel = new JPanel();label = new JLabel(输入,JLabel.LEFT);/ 设置输入提示标签 panel.add(label); / 设置文本输入框; inputText=new JTextField(10); panel.add(inputText);/inputText.addActionListener(this);boldBx=new JCheckBox(粗体); panel.add(boldBx);italicBx=new JCheckBox(斜体);panel.add(italicBx);colorBtn=new JButton(颜色); panel.add(colorBtn);return panel;private JPanel getCenterPanel() JPanel panel = new JPanel();panel.setLayout(new BorderLayout();txtArea=new JTextArea();panel.add(txtArea,BorderLayout.CENTER);return panel;private JPanel getSouthPanel() JPanel panel = new JPanel();GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment(); fontNames=ge.getAvailableFontFamilyNames();/ 获得系统中所有字体的名字; fontType=new JComboBox(fontNames); fontType.setEditable(false); fontType.setMaximumRowCount(10);panel.add(fontType);fontSizes=new String63;for(int i=0;i63;i+) fontSizesi=Integer.toString(i+10); fontSize=new JComboBox(fontSizes); fontSize.setEditable(false); fontSize.setMaximumRowCount(10);panel.add(fontSize);windowStyle = new JComboBox(style);panel.add(windowStyle);return panel;public static void 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和previousMonth。窗口的南面添加一个Panel容器,其布局是FlowLayout,Panel容器中放置一个标签用来显示一些信息。请按以下步骤完成程序设计:1) 编写CalendarBean类,实现日期类:public class CalendarBean String day;int year = 2013, month = 0;public void setYear(int year) this.year = year;public int getYear() return year;public void setMonth(int month) this.month = month;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 星期几 = 日历.get(Calendar.DAY_OF_WEEK) - 1;int day = 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 (int i = 星期几, n = 1; i 星期几 + day; i+) ai = String.valueOf(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 = 日, 一, 二, 三, 四, 五, 六 ;int year = 2013, month = 1;String days;public CalendarFrame() calendar = new CalendarBean();calendar.setYear(year);calendar.setMonth(month);days = calendar.getCalendar();ScrollPane scrollPane = new ScrollPane();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 i = 0; i 7; i+) titleNamei = new Button(namei);【补充代码】/ panel添加组件titleNamei。for (int i = 0; i 42; i+) labelDayi = new Label(, Label.CENTER);【补充代码】/ panel添加组件labelDayi。for (int i = 0; i 42; i+) labelDayi.setText(daysi);return panel;private Panel getSouthPanel() Panel panel = new Panel();【补充代码】return panel;3) 设计主应用程序类:public class CalendarMainClass public static void main(String args) CalendarFrame frame = new CalendarFrame();frame.setTitle(日历应用程序);frame.setBounds(100, 100, 360, 300);frame.setVisible(true);frame.validate();4) 调试、编译和运行程序,并显示正确界面。CalendarBean.javaimport java.util.Calendar;public class CalendarBean String day;int year = 2013, month = 0;public void setYear(int year) this.year = year;public int getYear() return year;public void setMonth(int month) this.month = month;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 星期几 = 日历.get(Calendar.DAY_OF_WEEK) - 1;int day = 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 (int i = 星期几, n = 1; i 星期几 + day; i+) ai = String.valueOf(n);n+;return a;CalendarFrame.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;public class CalendarFrame extends JFrame implements ActionListener,KeyListener/* * */private static final long serialVersionUID = 1L;Label labelDay = new Label42;Label labelYear;Button titleName = new Button7;Button nextMonth, previousMonth;Label showMessage;TextField inputYear;CalendarBean calendar;String name = 日, 一, 二, 三, 四, 五, 六 ;int year = 2013, month = 1;String days;public CalendarFrame() calendar = new CalendarBean();calendar.setYear(year);calendar.setMonth(month);days = calendar.getCalendar();ScrollPane scrollPane = new ScrollPane();scrollPane.add(getCenterPanel();add(Center,scrollPane);/【补充代码】/ 窗口添加scrollPane在中心区域add(getNorthPanel(),BorderLayout.NORTH);/【补充代码】/ 窗口添加pNorth 在北面区域add(getSouthPanel(),BorderLayout.SOUTH);/【补充代码】/ 窗口添加pSouth 在南区域。private Panel getNorthPanel() Panel panel = new Panel();/【补充代码】panel.setLayout(new FlowLayout(FlowLayout.CENTER,10,5);showMessage=new Label(请输入年份:);inputYear=new TextField(8);previousMonth=new Button(上月);nextMonth=new Button(下月);panel.add(showMessage);panel.add(inputYear);panel.add(previousMonth);panel.add(nextMonth);return panel;private Panel getCenterPanel() Panel panel = new Panel();panel.setLayout(new GridLayout(7,7);/【补充代码】/ 将panel的布局设置为7行7列的GridLayout布局for (int i = 0; i 7; i+) titleNamei = new Button(namei);panel.add(titleNamei);/【补充代码】/ panel添加组件titleNamei。for (int i = 0; i 42; i+) labelDayi = new Label(, Label.CENTER);panel.add(labelDayi);/【补充代码】/ panel添加组件labelDayi。for (int i = 0; i 42; i+) labelDayi.setText(daysi);return panel;private Panel getSouthPanel() CalendarMainClass.javaimport java.awt.*;import javax.swing.*;public class CalendarFrame extends JFrame /* * */private static final long serialVersionUID = 1L;Label labelDay = new Label42;Label labelYear;Button titleName = new Button7;Button nextMonth, previousMonth;Label showMessage;TextField inputYear;CalendarBean calendar;String name = 日, 一, 二, 三, 四, 五, 六 ;int year = 2013, month = 1;String days;public CalendarFrame() calendar = new CalendarBean();calendar.setYear(year);calendar.setMont
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 创“鲁班奖”方案
- 变压器结构简介
- 寝室卫生安全管理制度
- 小区规则宿舍管理制度
- 冻干粉针剂97课件
- 国网公司食堂管理制度
- 医疗资源协助管理制度
- 工地门卫烟酒管理制度
- 培训机构餐厅管理制度
- 原料库房退料管理制度
- 第五章 SPSS基本统计分析课件
- 2025年计算机Photoshop操作实务的试题及答案
- 2025时事热点政治题及参考答案(满分必刷)
- GB/T 23453-2025天然石灰石建筑板材
- 2024-2030全球WiFi 6移动热点行业调研及趋势分析报告
- 砌砖理论考试题及答案
- 中医针灸治疗脑梗塞后遗症的应用实践
- 2025年高等数学期末考试试题及答案
- 2024中国国新基金管理有限公司相关岗位招聘7人笔试参考题库附带答案详解
- 2025届各地名校4月上旬高三语文联考作文题目及范文12篇汇编
- 【9语一模】2025年4月天津市和平区九年级中考一模语文试卷(含答案)
评论
0/150
提交评论