0902413李雪瑞计算机工程系实验报告10.docx
- 文档编号:13059623
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:24
- 大小:178.79KB
0902413李雪瑞计算机工程系实验报告10.docx
《0902413李雪瑞计算机工程系实验报告10.docx》由会员分享,可在线阅读,更多相关《0902413李雪瑞计算机工程系实验报告10.docx(24页珍藏版)》请在冰点文库上搜索。
0902413李雪瑞计算机工程系实验报告10
计算机工程系实验报告
课程名称:
Java程序设计
成绩:
实验项目名称:
基于JAVA的图形用户界面设计技术基础
指导教师:
(签名)
班级:
计科14-4班
姓名:
李雪瑞
学号:
20140902413
一、实验目的:
(1)掌握JavaSwing组建的使用方法,包括窗口、框架、对话框、面板、文本编辑框、按钮、组合框等多种布局方式,掌握窗口菜单和快捷菜单设计方式。
(2)掌握多种布局方式;
(3)掌握窗口菜单和快捷菜单设计方式,熟悉在组件上绘图的方法;
(4)设计出具有图形用户界面的、能够响应事件的Java使用程序;
(5)掌握在MyEclipse集成开发环境中,通过设置编译路径引用其他项目中声明的类。
二、实验要求:
1.编写一个使用程序,要求有一个含有菜单的窗口,窗口中有文本区组件。
菜单有“打开文件”的菜单项,当单击该菜单项时,使用一个输入流将一个名为“hello.txt”文件的内容读入到文本中。
2.编写有两个文本区的使用程序。
当我们在一个文本区中输入若干个数时,另一个文本区同时对输入的数进行求和运算并求出平均值,也就是说随着输入的变化,另一个文本区不断地更新求和及平均值。
3.编写一个使用程序,有8个按钮,用户通过按动键盘上的方向键移动这些按钮。
4.编写一个使用程序,用户可以在一个文本框里输入数字字符,按回车后将数字存入一个文件。
当输入的数字大于1000时,弹出一个有模式的对话框,提示用户数子已经大于1000.
5.实现计算器的加、减、乘、除等基本运算。
三、完成程序:
1.
importjava.awt.*;
importjava.io.*;
importjavax.swing.*;
importjava.awt.event.*;
publicclassZuoye1{
publicstaticvoidmain(Stringargs[]){
newwinopen();
}
}
classwinopenextendsJFrameimplementsActionListener{
JMenumenu;
JMenuBarmb;
JMenuItemmi;
JTextAreatext;
winopen(){
mi=newJMenuItem("打开文件");
mi.addActionListener(this);
menu=newJMenu("菜单");
menu.add(mi);
mb=newJMenuBar();
mb.add(menu);
setJMenuBar(mb);
text=newJTextArea();
add(newJScrollPane(text),BorderLayout.CENTER);
setTitle("打开文件");
setBounds(400,150,400,300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
validate();
}
publicvoidactionPerformed(ActionEvente){
openopenfile();
text.setText(op.open());
}
}
classopenfile{
publicStringopen(){
newFile("E:
/hello.txt");
intn=0;
charb[]=newchar[100];
StringBuffersb=newStringBuffer(newString(""));
try{
reader=new(file);
while((n=reader.read(b,0,10))!
=-1){
sb.append(newString(b,0,n));
}
reader.close();
}
catch(IOExceptione){
System.out.println(e);
}
returnsb.toString();
}
}
实验结果抓图及分析:
窗口菜单项
打开“hello.txt”文件
此程序使用JMenuBar创建窗口和菜单,再使用JTextArea创建文本框。
然后使用输入流从文件“hello.txt”中读取文本信息。
输入流提供一条通道程序,可以使用这条通道读取“源”(即“hello.txt”文件)中的数据。
使得程序得以执行。
2.
importjavax.swing.*;
importjava.util.StringTokenizer;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.event.*;
publicclassZuoye2
{publicstaticvoidmain(Stringargs[])
{ComputerFramefr=newComputerFrame();
fr.setTitle("计算的窗口");
}
}
classComputerFrameextendsJFrameimplementsDocumentListener
{JTextAreatext1,text2;
intcount=1;
doublesum=0,aver=0;
publicComputerFrame()
{setLayout(newFlowLayout());
text1=newJTextArea(6,20);
text2=newJTextArea(6,20);
add(newJScrollPane(text1));
add(newJScrollPane(text2));
text2.setEditable(false);
(text1.getDocument()).addDocumentListener(this);
setSize(300,320);
setVisible(true);
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);
}
});
validate();
}
publicvoidchangedUpdate(DocumentEvente){//接口方法
hangdleText();//调用后面的hangdleText()方法
}
publicvoidremoveUpdate(DocumentEvente){//接口方法
changedUpdate(e);
}
publicvoidinsertUpdate(DocumentEvente){//接口方法
changedUpdate(e);
}
publicvoidhangdleText(){
Strings=text1.getText();
sum=0;
aver=0;
StringTokenizerfenxi=newStringTokenizer(s,",'\n'");
intn=fenxi.countTokens();
count=n;
doublea[]=newdouble[n];
for(inti=0;i<=n-1;i++)
{Stringtemp=fenxi.nextToken();
try{a[i]=Double.parseDouble(temp);
sum=sum+a[i];
}
catch(Exceptionee)
{count--;
}
}
aver=sum/count;
text2.setText(null);
text2.append("\n和:
"+sum);
text2.append("\n平均值:
"+aver);
}
}
实验结果抓图及分析:
窗口设置计算求和和均值
程序使用JTextArea创建了两个文本区,当一个文本区输入数字时,另一个文本区就使用String从前边的文本区中读取数据。
然后进行计算,使用append(Strings)方法在结尾加上文本,在另一个文本区中输出结果。
3.
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassZuoye3{
publicstaticvoidmain(Stringargs[]){
Winwin=newWin();
}
}
classWinextendsJFrameimplementsKeyListener{
JButtonb[]=newJButton[8];
intx,y;
Win(){
setLayout(newFlowLayout());
for(inti=0;i<8;i++){
b[i]=newJButton(""+i);
b[i].addKeyListener(this);
add(b[i]);
}
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
setBounds(10,10,300,300);
setVisible(true);
validate();
}
publicvoidkeyPressed(KeyEvente){
intmoveDistance=1;
Componentcom=(Component)e.getSource();
intx=(int)com.getBounds().x;
inty=(int)com.getBounds().y;
if(e.getKeyCode()==KeyEvent.VK_UP)
{
y=y-moveDistance;
com.setLocation(x,y);
RectanglecomRect=com.getBounds();
for(intk=0;k {RectangleorthRect=b[k].getBounds(); if(comRect.intersects(orthRect)&&com! =b[k]) {y=y+moveDistance; com.setLocation(x,y); break; } } if(y<=0)y=10; } elseif(e.getKeyCode()==KeyEvent.VK_DOWN) {y=y+moveDistance; com.setLocation(x,y); RectanglecomRect=com.getBounds(); for(intk=0;k {RectangleorthRect=b[k].getBounds(); if(comRect.intersects(orthRect)&&com! =b[k]) {y=y-moveDistance; com.setLocation(x,y); break; } } if(y>=300)y=300; } elseif(e.getKeyCode()==KeyEvent.VK_LEFT) {x=x-moveDistance; com.setLocation(x,y); RectanglecomRect=com.getBounds(); for(intk=0;k {RectangleorthRect=b[k].getBounds(); if(comRect.intersects(orthRect)&&com! =b[k]) {x=x+moveDistance; com.setLocation(x,y); break; } } if(x<=0)x=0; } elseif(e.getKeyCode()==KeyEvent.VK_RIGHT) {x=x+moveDistance; com.setLocation(x,y); RectanglecomRect=com.getBounds(); for(intk=0;k {RectangleorthRect=b[k].getBounds(); if(comRect.intersects(orthRect)&&com! =b[k]) {x=x-moveDistance; com.setLocation(x,y); break; } } if(x>=300)x=300; } } publicvoidkeyTyped(KeyEvente){} publicvoidkeyReleased(KeyEvente){} } 实验结果抓图及分析: 窗口和按钮设计利用键盘方向键进行移动 程序首先使用JButton类创建8个按钮并标号,然后使用keyPressed()方法创建键盘事件。 当按下键盘上某个键时,监视器就会发现,然后keyPressed()方法会自动执行,并且KeyEvent类会自动创建一个对象传递给keyPressed()方法中的参数。 keyTyped()方法是keyPressed()和keyReleased()方法的组合。 当键被按下又释放时,keyTyped()被调用。 4. importjava.awt.BorderLayout; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.io.; importjavax.swing.*; publicclassZuoye4extendsJFrameimplementsActionListener{ privateJTextFieldjx=newJTextField(); publicZuoye4(){ this.setLayout(newBorderLayout()); jx.addActionListener(this); this.add(jx,BorderLayout.NORTH); this.setSize(320,300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } @Override publicvoidactionPerformed(ActionEventarg0){ try{ fw=new("E: /swj.txt"); if(Integer.parseInt(jx.getText())>1000){ JOptionPane.showMessageDialog(null,"数字已大于1000","warning",JOptionPane.WARNING_MESSAGE); }else{ fw.write(jx.getText()); fw.close(); } }catch(Exceptione){ } } publicstaticvoidmain(String...args){ newZuoye4(); } } 实验结果抓图及分析: 此程序使用的确认对话框是有模式对话框,javax.swing包中的JOptionPane类的静态方法。 参数parentComponent指定消息对话框所依赖的组建,确认对话框会在该组件的正前方显示;message指定对话框上显示的消息;title指定对话框的标题。 5. importjava.awt.*; importjavax.swing.*; publicclassj{ publicstaticvoidmain(String[]args){ numberButtonframe=newnumberButton(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(310,285); frame.setLocationRelativeTo(null); frame.setTitle("计算器"); frame.setVisible(true); } } importjava.awt.*; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjavax.swing.*; publicclassnumberButtonextendsJFrame{ intcount=0; inta=0; intb=0; charcr=0; JButton[]jbt=newJButton[10]; JTextFieldjtf=newJTextField(14); publicnumberButton(){ JPanelp1=newJPanel(newGridLayout(4,4,4,4)); jbt[0]=newJButton("0"); JButtonjbtPoint=newJButton("."); JButtonjbtEqualitySign=newJButton("="); JButtonjbtPlusSign=newJButton("+"); JButtonjbtMinusSign=newJButton("-"); JButtonjbtTimesSign=newJButton("*"); JButtonjbtDivisionSign=newJButton("/"); JButtonjbtClear=newJButton("C"); jbt[0].setFont(newjava.awt.Font("微软雅黑",0,20)); jbtPoint.setFont(newjava.awt.Font("微软雅黑",0,20)); jbtEqualitySign.setFont(newjava.awt.Font("微软雅黑",0,20)); jbtPlusSign.setFont(newjava.awt.Font("微软雅黑",0,20)); jbtMinusSign.setFont(newjava.awt.Font("微软雅黑",0,20)); jbtTimesSign.setFont(newjava.awt.Font("微软雅黑",0,20)); jbtDivisionSign.setFont(newjava.awt.Font("微软雅黑",0,20)); jbtClear.setFont(newjava.awt.Font("微软雅黑",0,20)); for(inti=7;i>=1;i=i-3){ for(intj=i;j jbt[j]=newJButton(""+j);//JButton的数组,0~9分别对应的jbt[0]~jbt[9] p1.add(jbt[j]); jbt[j].setFont(newjava.awt.Font("微软雅黑",0,20)); } } jtf.setFont(newjava.awt.Font("微软雅黑",0,20)); p1.add(jbt[0]); p1.add(jbtPoint); p1.add(jbtEqualitySign); JPanelp2=newJPanel(newGridLayout(2,2,4,4)); p2.add(jbtPlusSign); p2.add(jbtMinusSign); p2.add(jbtTimesSign); p2.add(jbtDivisionSign); JPanelp3=newJPanel(newGridLayout(2,2,4,4)); p3.add(p2,BorderLayout.CENTER); p3.add(jbtClear,BorderLayout.SOUTH); JPanelp4=newJPanel(newFlowLayout(FlowLayout.LEFT,7,7)); p4.add(p1); p4.add(p3); JPanelp5=newJPanel(newFlowLayout(FlowLayout.LEFT,7,7)); p5.add(jtf); p5.add(p4); add(p5); jbt[0].addActionListener(newJbtnumListener(0)); jbt[1].addActionListener(newJbtnumListener (1)); jbt[2].addActionListener(newJbtnumListener (2)); jbt[3].addActionListener(newJbtnumListener(3)); jbt[4].addActionListener(newJbtnumListener(4)); jbt[5].addActionListener(newJbtnumListener(5)); jbt[6].addActionListener(newJbtnumListener(6)); jbt[7].addActionListener(newJbtnumListener(7)); jbt[8].addActionListener(newJbtnumListener(8)); jbt[9].addActionListener(newJbtnumListener(9)); jbtPlus
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 0902413 李雪瑞 计算机 工程系 实验 报告 10