实验四 Java的GUI编程及图形处理与Java 2D.doc_第1页
实验四 Java的GUI编程及图形处理与Java 2D.doc_第2页
实验四 Java的GUI编程及图形处理与Java 2D.doc_第3页
实验四 Java的GUI编程及图形处理与Java 2D.doc_第4页
实验四 Java的GUI编程及图形处理与Java 2D.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

实验四 Java的GUI编程(一) 开发文字字体设计窗体【实验目的】(1) 了解GUI的概念;(2) 了解java.awt包和javax.swing包,并比较它们具有的同性质的组件的异同;(3) 掌握和运用Java的基本GUI组件,了解他们的特点。【实验任务】 要求设计一个文字字体设计窗体,在该窗体中可以设置要显示文字的字体内容,包括字体名称、字体大小、粗体和斜体等字体风格。并模拟在不同操作系统下的显示效果。【实验内容】阅读并分析以下程序,将程序中的代码补充完整,编译并运行程序,查看结果。/ArtFont.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;public class ArtFont extends JFrame implements ActionListener,ItemListener JComboBox fontType,fontSize; JCheckBox boldBx;/粗体按钮 JCheckBox italicBx;/斜体按钮 JButton colorBtn;/颜色按钮; String fontNames;/字体名称; String fontSizes;/字体尺寸; JLabel label;/输入提示标签; JTextField inputText;/文字输入框; JTextArea txtArea;/文字显示区; JPanel fontPanel;/字体设置; JPanel showPanel;/显示效果区 Font font; int boldStyle,italicStyle,underlineStyle; int fontSizeStyle; String fontNameStyle; Color colorStyle=Color.black;/设置字体的默认颜色为黑色; public ArtFont() super(字体设置); /设置默认字体 boldStyle=0; italicStyle=0; underlineStyle=0; fontSizeStyle=10; fontNameStyle=宋体; font=new Font(fontNameStyle,boldStyle+italicStyle,fontSizeStyle); fontPanel=new JPanel(); fontPanel.setLayout(new FlowLayout(); /设置字体名字 GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment(); fontNames=ge.getAvailableFontFamilyNames();/获得系统中所有字体的名字; fontType=new JComboBox(fontNames); fontType.setEditable(false); fontType.setMaximumRowCount(10); fontType.addItemListener(new ItemListener() public void itemStateChanged(ItemEvent e) /实现监听字体名字改变的事件 String item=(String) e.getItem(); System.out.println(item); fontNameStyle= item; font=new Font(fontNameStyle,boldStyle+italicStyle,fontSizeStyle); txtArea. 代码1 ; /设置显示区字体 ); /设置字体大小 fontSizes=new String63; for(int i=0;i63;i+) fontSizesi=Integer.toString(i+10); fontSize=new JComboBox(fontSizes); fontSize.setEditable(false); fontSize.setMaximumRowCount(10); fontSize.addItemListener(new ItemListener() public void itemStateChanged(ItemEvent e) /实现监听字体大小改变的方法 String size=(String)e.getItem(); fontSizeStyle=Integer.parseInt(size); font=new Font(fontNameStyle,boldStyle+italicStyle,fontSizeStyle); txtArea.setFont(font); ); /设置粗体选择按钮; boldBx=new JCheckBox(粗体); boldBx.addItemListener(new ItemListener() public void itemStateChanged(ItemEvent e) /实现监听选择粗体状态改变的方法 if(e.getSource()=boldBx&e.getStateChange()=e.SELECTED) boldStyle= 代码2 ; /设置字体为粗体 font=new Font(fontNameStyle,boldStyle+italicStyle,fontSizeStyle); txtArea.setFont(font); ); /设置斜体选择按钮; italicBx=new JCheckBox(斜体); italicBx.addItemListener(new ItemListener() public void itemStateChanged(ItemEvent e) /实现监听选择斜体状态改变的方法 if(e.getSource()=italicBx&e.getStateChange()=e.SELECTED) italicStyle= 代码3 ; /设置字体为斜体 font=new Font(fontNameStyle,boldStyle+italicStyle,fontSizeStyle); txtArea.setFont(font); ); /设置颜色选择; colorBtn=new JButton(颜色); colorBtn.addActionListener(this); /设置字体面板; fontPanel.add(fontType); fontPanel.add(fontSize); fontPanel.add(boldBx); fontPanel.add(italicBx); fontPanel.add(colorBtn); /设置输入提示标签 label=new JLabel(输入); /设置文本输入框; inputText=new JTextField(30); inputText.addActionListener(this); /设置文本显示区; txtArea=new JTextArea(10,80);/20行80列; txtArea.setFont(font); /设置文本面板; showPanel=new JPanel(); showPanel.add(label); showPanel.add(inputText); showPanel.setLayout(new FlowLayout(); showPanel.add(new JScrollPane(txtArea); / showPanel.add(styleBtn); /设置容器; Container container=getContentPane(); container.setLayout(new BorderLayout(); container.add(fontPanel,BorderLayout.NORTH); container.add(showPanel,BorderLayout.CENTER); setSize(500,300); setVisible(true); public void actionPerformed(ActionEvent e) if(e.getSource()=colorBtn)/改变颜色 colorStyle=JColorChooser.showDialog(this,选择字体颜色,colorStyle); colorBtn.setForeground(colorStyle); txtArea.setForeground(colorStyle); else if(e.getSource()=inputText)/将输入文字在文字显示区表示; txtArea.setText(inputText.getText(); public static void main(String args) 代码4 ; artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 思考:(1)如果将颜色按钮colorBtn的事件监听者改为一个为ActionListener匿名对象,即将程序中的语句colorBtn.addActionListener(this)改成如下形式:colorBtn.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if(e.getSource()=colorBtn)/改变颜色 colorStyle=JColorChooser.showDialog(this, 选择字体颜色,colorStyle); colorBtn.setForeground(colorStyle); txtArea.setForeground(colorStyle); ); 程序可否编译正常?运行正常吗?如果不能,是什么原因?(2)如果将程序ArtFont.java中所有的匿名监听者改为this,那么程序主要会做什么变动?(3)程序运行结果是java的默认显示效果,如果希望用户能控制界面的显示效果,呈现出具有UNIX操作系统的显示外观和Window操作系统的默认显示效果,该如何修改程序?(二) 布局与日历【实验目的】学习使用布局类。【实验任务】编写一个应用程序,有一个窗口,该窗口为BorderLayout布局。窗口的中心添加一个Panel容器:pCenter,pCenterd的布局是7行7列的GridLayout布局,pCenter中放置49个标签,用来显示日历。窗口的北面添加一个Panel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonth和previousMonth,单击nextMonth按钮,可以显示当前月的下一月的日历;单击previousMonth按钮可以显示当前月的上一月的日历。窗口的南面添加一个Panel容器pSouth,起布局是FlowLayout,pSouth中放置一个标签用来显示一些信息。【实验内容】阅读并分析以下程序,将程序中的代码补充完整,编译并运行程序,查看结果。/CalendarBean.javaimport java.util.Calendar;public class CalendarBean String day; int year=2005,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; public String getCalendar() String a=new String42; Calendar 日历=Calendar.getInstance(); 日历.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.util.*;import java.awt.*;import java.awt.event.*;import java.applet.*;public class CalendarFrame extends Frame implements ActionListener Label labelDay=new Label42; Button titleName=new Button7; String name=日,一,二,三, 四,五,六; Button nextMonth,previousMonth; int year=2006,month=10; CalendarBean calendar; Label showMessage=new Label(,Label.CENTER); public CalendarFrame() Panel pCenter=new Panel(); 【代码1】 /将pCenter的布局设置为7行7列的GridLayout 布局。 for(int i=0;i7;i+) titleNamei=new Button(namei); 【代码2】/pCenter添加组件titleNamei。 for(int i=0;i42;i+) labelDayi=new Label(,Label.CENTER); 【代码3】/pCenter添加组件labelDayi。 calendar=new CalendarBean(); calendar.setYear(year); calendar.setMonth(month); String day=calendar.getCalendar(); for(int i=0;i12) month=1; calendar.setMonth(month); String day=calendar.getCalendar(); for(int i=0;i42;i+) labelDayi.setText(dayi); else if(e.getSource()=previousMonth) month=month-1; if(month1) month=12; calendar.setMonth(month); String day=calendar.getCalendar(); for(int i=0;i42;i+) labelDayi.setText(dayi); showMessage.setText(日历:+calendar.getYear()+年+calendar.getMonth()+月 ); /CalendarMainClass.javapublic class CalendarMainClass public static void main(String args) CalendarFrame frame=new CalendarFrame(); frame.setBounds(100,100,360,300); frame.setVisible(true); frame.validate(); frame.addWindowListener(new java.awt.event.WindowAdapter() public void windowClosing(java.awt.event.WindowEvent e) System.exit(0); ); 思考:请在CalendarFrame类中增加一个TextField文本框,用户可以通过在文本框中输入年份来修改calender对象的int成员year。(三) 绘制彩色饼图【实验目的】(1) 熟悉图形绘制方法;(2) 了解Java2D图形绘制的基本概念和方法;(3) 使用Java2D进行文字图形填充。【实验任务】 某公司针对要推出的新产品向消费者进行满意度调查,调查分为4个等级:A满意、B一般、C不满意、D不感兴趣。经统计参与调查的500名消费者试用结果为选择A的有60%、选择B的有20%、选择C的有10%、选择D的有10%。绘制一个彩色饼图描述上述百分比数值。【实验内容】阅读并分析以下程序,将程序中的代码补充完整,编译并运行程序,查看结果。/ Piechart.javaimport java.awt.*;import java.awt.geom.*;import javax.swing.*;public class Piechart extends JFrame public Piechart() getContentPane().add( 代码1 );setTitle(绘制饼图);setSize(400,400);setVisible(true);public static void main(String args) JFrame frame = new Piechart();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);class PaintPiechart extends JPanelpublic void paintComponent(Graphics g) super.paintComponent(g);Graphics2D g2 = 代码2 ;int width = getWidth(); int height = getHeight()-50; int x = width/2;int y = height/2;int radius = (int)(Math.min(width, height)/3);Arc2D r1 = new Arc2D.Double(x-radius,y-radius,2 * radius,2 * radius,0,6*36,Arc2D.PIE);g2.setColor(Color.magenta);g2.fill(r1);Arc2D r2 = 代码3 ; g2.setColor(Color.LIGHT_GRAY);g2.fill(r2);Arc2D r3 = 代码4 ;g2.setColor(Color.blue);g2.fill(r3);Arc2D r4 = 代码5 ; g2.setColor(Color.orange);g2.fill(r4);g2.setColor(Color.black);g2.drawString(A 满意:60%,x,y - radius );g2.drawString(B 一般:20%,x-radius,y + radius);g2.drawString(C 不满意:10%,x+radius/2,y + radius);g2.drawString(D 不感兴趣:10%,x+radius/2,y + radius/3); 思考:如果需要将上述统计结果绘制为柱状图,应如何实现?(四) 英语单词拼写训练【实验目的】学习焦点事件、鼠标事件和键盘事件。【实验任务】编写一个应用程序,要求如下:窗口中有一个TextField对象和一个按钮对象,将这两个对象添加到一个面板中,然后将该面板添加到窗口的北面。用户在TextField对象中输入一个英文单词,然后回车或单击按钮,程序将创建若干个标签,其个数刚好等于英文单词所包含的字母的标签,而且每个标签上的名字刚好是英文单词中的一个字母。要求将这些标签按一行添加到一个面板中,然后将该面板添加到窗口的中心。用户用鼠标单击一个标签后,通过按下键盘上的左右箭头交换相邻标签上的字母,使得这些标签上字母的排列顺序和英文单词中字母的顺序相同。【实验内容】阅读并分析以下程序,将程序中的代码补充完整,编译并运行程序,查看结果。/RondomString.javapublic class RondomString String str=; public String getRondomString(String s) StringBuffer strBuffer=new StringBuffer(s); int m=strBuffer.length(); for(int k=0;km;k+) int index=(int)(Math.random()*strBuffer.length(); char c=strBuffer.charAt(index); str=str+c; strBuffer=strBuffer.deleteCharAt(index); return str; /LetterLabel.javaimport java.awt.*;import java.awt.event.*;public class LetterLabel extends Button implements FocusListener,MouseListener LetterLabel() 【代码1】 /将当前对象注册为自身的焦点监视器 【代码2】 /将当前对象注册为自身的鼠标监视器 setBackground(Color.cyan); setFont(new Font(,Font.BOLD,30); public static LetterLabel getLetterLabel(int n) LetterLabel a=new LetterLabeln; for(int k=0;k0) label=LetterLabel.getLetterLabel(n); for(int k=0;klabel.length;k+) 【代码3】 /将当前窗口注册为labelk的键盘监视器 labelk.setLabel(+randomWord.charAt(k); wordBox.add(labelk); validate(); inputWord.setText(null); label0.requestFocus(); public void keyPressed(KeyEvent e) LetterLabel sourceLabel=(LetterLabel)e.getSource(); int index=-1; if( e.getKeyCo

温馨提示

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

评论

0/150

提交评论