湖北汽车工业学院JAVA程序设计 实验三 Java的GUI编程 实验指
更新时间:2024-04-27 19:20:01 阅读量: 综合文库 文档下载
实验三 Java的GUI编程
(一) 开发文字字体设计窗体
【实验目的】
(1) 了解GUI的概念;
(2) 了解java.awt包和javax.swing包,并比较它们具有的同性质的组件的异同; (3) 掌握和运用Java的基本GUI组件,了解他们的特点。
【实验任务】
要求设计一个文字字体设计窗体,在该窗体中可以设置要显示文字的字体内容,包括
字体名称、字体大小、粗体和斜体等字体风格。并模拟在不同操作系统下的显示效果。
【实验内容】
阅读并分析以下程序,将程序中的代码补充完整,编译并运行程序,查看结果。
//ArtFont.java
import 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;//设置字体的默认颜色为黑色;
String[] style = { \默认显示效果\, \显示效果\, \显示效果\ }; JComboBox styleBtn;
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 String[63]; for(int i=0;i<63;i++){
fontSizes[i]=Integer.toString((i+10)); }
fontSize=new JComboBox(fontSizes); fontSize.setEditable(false);
fontSize.setMaximumRowCount(10); // 设置 JComboBox 显示的最大行数。 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);
//设置窗口的样式;
styleBtn=new JComboBox(style); styleBtn.addItemListener(this);
//设置文本面板;
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 void itemStateChanged(ItemEvent e) {
String s = (String) e.getItem(); String className = \;
if (s.equals(\显示效果\))
}
className =
\;
else if (s.equals(\显示效果\)) className = else if (s.equals(\默认显示效果\)) className = try { }
UIManager.setLookAndFeel(className);
SwingUtilities.updateComponentTreeUI(this); System.out.println(\);
\;
UIManager.getCrossPlatformLookAndFeelClassName();
} catch (Exception de) {
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); //this 换成colorBtn
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.java
import 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 String[42];
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)&&(year0!=0))||(year@0==0)) { day=29; } else
{ day=28; } }
for(int i=星期几,n=1;i<星期几+day;i++) {
a[i]=String.valueOf(n) ; n++; } return a; } }
//CalendarFrame.java
import java.util.*; import java.awt.*;
import java.awt.event.*; import java.applet.*;
public class CalendarFrame extends Frame implements ActionListener { Label labelDay[]=new Label[42]; Button titleName[]=new Button[7];
String name[]={\日\一\二\三\四\五\六\ Button nextMonth,previousMonth; int year=2006,month=10; CalendarBean calendar;
Label showMessage=new Label(\ public CalendarFrame()
{ Panel pCenter=new Panel();
【代码1】 //将pCenter的布局设置为7行7列的GridLayout 布局。 for(int i=0;i<7;i++)
{ titleName[i]=new Button(name[i]);
【代码2】//pCenter添加组件titleName[i]。 }
for(int i=0;i<42;i++) {
labelDay[i]=new Label(\ 【代码3】//pCenter添加组件labelDay[i]。 }
calendar=new CalendarBean(); calendar.setYear(year); calendar.setMonth(month);
String day[]=calendar.getCalendar();
for(int i=0;i<42;i++)
{ labelDay[i].setText(day[i]); }
nextMonth=new Button(\下月\ previousMonth=new Button(\上月\ nextMonth.addActionListener(this); previousMonth.addActionListener(this); Panel pNorth=new Panel(), pSouth=new Panel(); pNorth.add(previousMonth); pNorth.add(nextMonth); pSouth.add(showMessage);
showMessage.setText(\日历:\年\calendar.getMonth()+\月\
ScrollPane scrollPane=new ScrollPane(); scrollPane.add(pCenter);
【代码4】// 窗口添加scrollPane在中心区域 【代码5】// 窗口添加pNorth 在北面区域 【代码6】// 窗口添加pSouth 在南区域。 }
public void actionPerformed(ActionEvent e) { if(e.getSource()==nextMonth) { month=month+1; if(month>12) month=1;
calendar.setMonth(month);
String day[]=calendar.getCalendar(); for(int i=0;i<42;i++)
{ labelDay[i].setText(day[i]); } }
else if(e.getSource()==previousMonth) { month=month-1; if(month<1) month=12;
calendar.setMonth(month);
String day[]=calendar.getCalendar(); for(int i=0;i<42;i++)
{ labelDay[i].setText(day[i]); } }
showMessage.setText(\日历:\年\月\ }
}
//CalendarMainClass.java
public 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.java
import java.awt.*; import java.awt.geom.*; import javax.swing.*;
public class Piechart extends JFrame {
}
public Piechart() { }
public static void main(String[] args) {
JFrame frame = new Piechart();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }
getContentPane().add( 代码1 ); setTitle(\绘制饼图\); setSize(400,400); setVisible(true);
class PaintPiechart extends JPanel{
public 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, 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(\满意:60%\,x,y - radius );
2 * radius,2 * radius,0,6*36,Arc2D.PIE);
g2.drawString(\一般:20%\,x-radius,y + radius); g2.drawString(\不满意:10%\,x+radius/2,y + radius); g2.drawString(\不感兴趣:10%\,x+radius/2,y + radius/3);
} }
思考:如果需要将上述统计结果绘制为柱状图,应如何实现?
g2.drawString(\一般:20%\,x-radius,y + radius); g2.drawString(\不满意:10%\,x+radius/2,y + radius); g2.drawString(\不感兴趣:10%\,x+radius/2,y + radius/3);
} }
思考:如果需要将上述统计结果绘制为柱状图,应如何实现?
正在阅读:
湖北汽车工业学院JAVA程序设计 实验三 Java的GUI编程 实验指04-27
电磁场原理习题与解答(第7章)01-29
关于出差调研报告的范文01-03
关于平台建设的需求及框架-修改06-19
汽车漆面修复工作页04-30
黑龙江省大庆第一中学2016-2017学年高二第二次(11月)09-03
记一场篮球运动会作文350字06-15
离子推断题汇总(一)04-19
在公司党建暨职代会上的讲话08-23
智慧树知到《组织学与胚胎学》章节测试答案04-14
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 实验
- 湖北
- JAVA
- 程序设计
- 编程
- 工业
- 学院
- 汽车
- GUI
- 高中政治哲学知识点总结
- 2019届高考语文一轮复习基础强化训练:(26)名篇名句默写
- 多边形的内角和教案
- 2011年导游法规知识真题答案(章节目录)
- Ubuntu下Samba服务器的搭建
- 湖南省(长郡中学、株洲市第二中学)、江西省(九江一中)等十四校20
- 建筑结构上复习提纲
- 2018-2024年中国新材料市场前景研究与战略咨询报告目录
- vmwarevmdk文件系统恢复和三种工作模式详解的相关文章推荐-windo
- GM-8003D对讲话筒调试说明书
- 历年考研英语阅读
- 最准确!最权威!2012年执医最新试题及答案
- 基于Packet_Tracer的IPv6校园网组建毕业设计
- 四水平延伸施工组织设计
- 发电厂电气运行培训题库(实用型)
- 江苏省常州市教育信息化三年行动计划
- 3PAR容灾方案模板 - Neil - v1.1 - 图文
- “三校三审”工作细则
- 台山旅游景点 - 图文
- 【重庆医科大学】科学社会主义题库(带答案)