最新实验三图形用户界面设计汽院含答案.docx
《最新实验三图形用户界面设计汽院含答案.docx》由会员分享,可在线阅读,更多相关《最新实验三图形用户界面设计汽院含答案.docx(23页珍藏版)》请在冰豆网上搜索。
最新实验三图形用户界面设计汽院含答案
实验三图形用户界面设计(汽院含答案)
实验三图形用户界面设计
实验目的
1.掌握Java语言中GUI编程的基本方法
2.掌握Java语言中AWT组件的基本用法
3.掌握Java语言中Swing组件的基本用法
实验导读
1.通过图形用户界面(GUI:
GraphicsUserInterface),用户和程序之间可以方便地进行交互。
AWT(AbstractWindowingToolkit),中文译为抽象窗口工具包,是Java提供的用来建立和设置Java的图形用户界面的基本工具。
AWT由Java中的java.awt包提供,里面包含了许多可用来建立与平台无关的图形用户界面(GUI)的类,这些类又被称为组件(components)。
Swing是一个用于开发Java应用程序用户界面的开发工具包。
它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。
Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
JDK写程序所有功能都是靠虚拟机去操作本地操作系统。
比如window下,就是JDK用windowsAPI实现功能。
而awt包中很多组件是组件自身去调用本地操作系统代码
swing包中的组件采用的是调用本地虚拟机方法,由虚拟机再调用本地操作系统代码。
意思就是中间多了一层,这样就加强了swing包的移植性,与本地关系不那强了。
图3.1AWT常用组件继承关系图
Container为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。
2.布局,容器中的组件的排放方式。
常见的布局管理器:
FlowLayout(流式布局管理器):
从左到右的顺序排列。
Panel默认的布局管理器。
BorderLayout(边界布局管理器):
东,南,西,北,中。
Frame默认的布局管理器。
GridLayout(网格布局管理器):
规则的矩阵
CardLayout(卡片布局管理器):
选项卡
GridBagLayout(网格包布局管理器):
非规则的矩阵
3.类JFrame是java.awt.Frame的扩展版本,该版本添加了对JFC/Swing组件架构的支持,常用方法如下:
1)JFrame()该构造方法可以创建一个无标题的窗口,窗口的默认布局为BorderLayout布局。
2)JFrame(Strings)该构造方法可以创建一个标题为s的窗口,窗口的默认布局为BorderLayout布局。
3)publicvoidsetBounds(inta,intb,intwidth,intheight)窗口调用该方法可以设置出现在屏幕上时的初始位置是(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是width,高是height。
4)publicvoidsetSize(intwidth,intheight)设置窗口的大小,窗口在屏幕出现是默认位置是(0,0)。
5)publicvoidsetVisible(booleanb)设置窗口是可见还是不可见,窗口默认是不可见的。
6)publicvoidsetResizable(booleanb)设置窗口是否可调整大小,窗口默认是可调整大小的。
7)publicvoidsetDefaultCloseOperation(intoperation)设置用户在此窗体上发起"close"时默认执行的操作。
8)publicvoidsetLocationRelativeTo(Componentc)设置窗口相对于指定组件的位置。
如果组件当前未显示,或者c为null,则此窗口将置于屏幕的中央。
实验内容
1.图形用户界面设计程序(ArtFont.java)
要求:
设计一个文字字体设置窗体,在该窗体中可以设置要显示文字的字体内容,包括字体名称、字体大小、粗体和斜体等字体风格。
并模拟在不同操作系统下的显示效果。
程序的最终显示效果如下:
提示:
整个窗体继承于JFrame,采用BorderLayout布局。
在窗体中添加三个JPanel:
northPanel、centerPanel和southPanel,分别位于窗体的北部、中部和南部,然后分别在各个面板中添加其它组件,并逐步完善程序功能。
请按以下步骤完成程序设计:
1)新建ArtFont类,该类用于显示主界面。
其主要代码如下:
publicclassArtFontextendsJFrame{
JComboBoxfontType;//字体样式下拉框,
JComboBoxfontSize;//字体大小下拉框
JComboBoxwindowStyle;//窗体样式下拉框
JCheckBoxboldBx;//粗体按钮
JCheckBoxitalicBx;//斜体按钮
JButtoncolorBtn;//颜色按钮;
String[]fontNames;//字体名称;
String[]fontSizes;//字体大小;
JLabellabel;//输入提示标签;
JTextFieldinputText;//文字输入框;
JTextAreatxtArea;//文字显示区;
JPanelnorthPanel;//字体设置;
JPanelcenterPanel;//显示效果区
JPanelsouthPanel;//样式设置
Fontfont;
intboldStyle,italicStyle,underlineStyle;
intfontSizeStyle;
StringfontNameStyle;
ColorcolorStyle=Color.black;//设置字体的默认颜色为黑色;
String[]style={"默认显示效果","Windows显示效果","Unix显示效果"};
publicArtFont(){
super("字体设置");
//设置默认字体
boldStyle=0;
italicStyle=0;
underlineStyle=0;
fontSizeStyle=10;
fontNameStyle="宋体";
font=newFont(fontNameStyle,boldStyle+italicStyle,fontSizeStyle);
northPanel=getNorthPanel();
centerPanel=getCenterPanel();
southPanel=getSouthPanel();
//设置容器;
Containercontainer=getContentPane();
container.setLayout(newBorderLayout());
【补充代码】//将northPanel添加到窗体的北部
【补充代码】//将centerPanel添加到窗体的北部
【补充代码】//将southPanel添加到窗体的北部
setSize(500,300);
【补充代码】//将窗体位于屏幕的中央
setVisible(true);}
privateJPanelgetNorthPanel(){
JPanelpanel=newJPanel();
returnpanel;
}
privateJPanelgetCenterPanel(){
JPanelpanel=newJPanel();
returnpanel;
}
privateJPanelgetSouthPanel(){
JPanelpanel=newJPanel();
returnpanel;
}
publicstaticvoidmain(Stringargs[]){
ArtFontartFont=newArtFont();
artFont.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
2)根据ArtFont类代码和程序界面图设计北部面板northPanel:
privateJPanelgetNorthPanel(){
JPanelpanel=newJPanel();
【补充代码…】
returnpanel;
}
3)根据ArtFont类代码和程序界面图设计中部面板centerPanel:
privateJPanelgetCenterPanel(){
JPanelpanel=newJPanel();
【补充代码…】
returnpanel;
}
4)根据ArtFont类代码和程序界面图设计南部面板southPanel:
privateJPanelgetSouthPanel(){
JPanelpanel=newJPanel();
//获得系统默认字体
GraphicsEnvironmentge=GraphicsEnvironment.getLocalGraphicsEnvironment();
fontNames=ge.getAvailableFontFamilyNames();
fontType=newJComboBox(fontNames);
//设置字体大小
fontSizes=newString[63];
for(inti=0;ifontSizes[i]=Integer.toString(i+10);
}
【补充代码…】
returnpanel;
}
5)调试、编译和运行程序,并显示正确界面。
答案:
importjavax.swing.*;
importjava.awt.*;
publicclassArtFontextendsJFrame{
JComboBoxfontType;//字体样式下拉框,
JComboBoxfontSize;//字体大小下拉框
JComboBoxwindowStyle;//窗体样式下拉框
JCheckBoxboldBx;//粗体按钮
JCheckBoxitalicBx;//斜体按钮
JButtoncolorBtn;//颜色按钮;
String[]fontNames;//字体名称;
String[]fontSizes;//字体大小;
JLabellabel;//输入提示标签;
JTextFieldinputText;//文字输入框;
JTextAreatxtArea;//文字显示区;
JPanelnorthPanel;//字体设置;
JPanelcenterPanel;//显示效果区
JPanelsouthPanel;//样式设置
Fontfont;
intboldStyle,italicStyle,underlineStyle;
intfontSizeStyle;
StringfontNameStyle;
ColorcolorStyle=Color.black;//设置字体的默认颜色为黑色;
String[]style={"默认显示效果","Windows显示效果","Unix显示效果"};
publicArtFont(){
super("字体设置");
//设置默认字体
boldStyle=0;
italicStyle=0;
underlineStyle=0;
fontSizeStyle=10;
fontNameStyle="宋体";
font=newFont(fontNameStyle,boldStyle+italicStyle,fontSizeStyle);
northPanel=getNorthPanel();
centerPanel=getCenterPanel();
southPanel=getSouthPanel();
//设置容器;
Containercontainer=getContentPane();
container.setLayout(newBorderLayout());
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);}
privateJPanelgetNorthPanel(){
JPanelpanel=newJPanel();
label=newJLabel("输入",JLabel.LEFT);
//设置输入提示标签
panel.add(label);
//设置文本输入框;
inputText=newJTextField(10);
panel.add(inputText);
//inputText.addActionListener(this);
boldBx=newJCheckBox("粗体");
panel.add(boldBx);
italicBx=newJCheckBox("斜体");
panel.add(italicBx);
colorBtn=newJButton("颜色");
panel.add(colorBtn);
returnpanel;
}
privateJPanelgetCenterPanel(){
JPanelpanel=newJPanel();
panel.setLayout(newBorderLayout());
txtArea=newJTextArea();
panel.add(txtArea,BorderLayout.CENTER);
returnpanel;
}
privateJPanelgetSouthPanel(){
JPanelpanel=newJPanel();
GraphicsEnvironmentge=GraphicsEnvironment.getLocalGraphicsEnvironment();
fontNames=ge.getAvailableFontFamilyNames();//获得系统中所有字体的名字;
fontType=newJComboBox(fontNames);
fontType.setEditable(false);
fontType.setMaximumRowCount(10);
panel.add(fontType);
fontSizes=newString[63];
for(inti=0;i<63;i++)
{fontSizes[i]=Integer.toString((i+10));}
fontSize=newJComboBox(fontSizes);
fontSize.setEditable(false);
fontSize.setMaximumRowCount(10);
panel.add(fontSize);
windowStyle=newJComboBox(style);
panel.add(windowStyle);
returnpanel;
}
publicstaticvoidmain(Stringargs[]){
ArtFontartFont=newArtFont();
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类,实现日期类:
publicclassCalendarBean{
Stringday[];
intyear=2013,month=0;
publicvoidsetYear(intyear){
this.year=year;
}
publicintgetYear(){
returnyear;
}
publicvoidsetMonth(intmonth){
this.month=month;
}
publicintgetMonth(){
returnmonth;
}
//返回某年某月1号开始的日期数组
publicString[]getCalendar(){
Stringa[]=newString[42];
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||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++){
a[i]=String.valueOf(n);
n++;
}
returna;
}
}
2)补充代码,完成日历窗体界面类设计:
publicclassCalendarFrameextendsFrame{
LabellabelDay[]=newLabel[42];
LabellabelYear;
ButtontitleName[]=newButton[7];
ButtonnextMonth,previousMonth;
LabelshowMessage;
TextFieldinputYear;
CalendarBeancalendar;
Stringname[]={"日","一","二","三","四","五","六"};
intyear=2013,month=1;
Stringdays[];
publicCalendarFrame(){
calendar=newCalendarBean();
calendar.setYear(year);
calendar.setMonth(month);
days=calendar.getCalendar();
ScrollPanescrollPane=newScrollPane();
scrollPane.add(getCenterPanel());
【补充代码】//窗口添加scrollPane在中心区域
【补充代码】//窗口添加pNorth在北面区域
【补充代码】//窗口添加pSouth在南区域。
}
privatePanelgetNorthPanel(){
Panelpanel=newPanel();
【补充代码…】
returnpanel;
}
privatePanelgetCenterPanel(){
Panelpanel=newPanel();
【补充代码】//将panel的布局设置为7行7列的GridLayout布局
for(inti=0;i<7;i++){
titleName[i]=newButton(name[i]);
【补充代码】//panel添加组件titleName[i]。
}
for(inti=0;i<42;i++){
labelDay[i]=newLabel("",Label.CENTER);
【补充代码】//panel添加组件labelDay[i]。
}
for(inti=0;i<42;i++){
labelDay[i].setText(days[i]);
}
returnpanel;
}
privatePanelgetSouthPanel(){
Panelpanel=newPanel()