实验2 面向对象d图形与e事件驱动.docx

上传人:b****8 文档编号:12525524 上传时间:2023-06-06 格式:DOCX 页数:16 大小:32.74KB
下载 相关 举报
实验2 面向对象d图形与e事件驱动.docx_第1页
第1页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第2页
第2页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第3页
第3页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第4页
第4页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第5页
第5页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第6页
第6页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第7页
第7页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第8页
第8页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第9页
第9页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第10页
第10页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第11页
第11页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第12页
第12页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第13页
第13页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第14页
第14页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第15页
第15页 / 共16页
实验2 面向对象d图形与e事件驱动.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验2 面向对象d图形与e事件驱动.docx

《实验2 面向对象d图形与e事件驱动.docx》由会员分享,可在线阅读,更多相关《实验2 面向对象d图形与e事件驱动.docx(16页珍藏版)》请在冰点文库上搜索。

实验2 面向对象d图形与e事件驱动.docx

实验2面向对象d图形与e事件驱动

实验2面向对象(图形与事件驱动)

Java提供了图形用户界面(GUl)库,以便程序员能方便地构建一个在所有平台上都能正常显示的图形界面。

基础类库AWT和swing就是为此设计的。

本次实验将学习图形用户界面的编写。

一、实验目的1

二、实验要求1

三、实验内容2

1.图形界面外观设计实验2

1.1预备知识2

1.2建立窗口。

运行下面的3个程序,比较它们的区别。

3

1.3框架(窗口)的结构4

1.4向窗口添加组件。

思考退出按钮为何在取消按钮之前。

5

1.5自行编程验证3种布局管理器的特性。

6

1.6编写程序,框架用JFrame;容器用JPanel,有2个;原子组件有3个按钮、2个JLabel。

请用三种布局分别实现。

6

2.绘图实验6

2.1预备知识6

2.2运行下面的程序。

输出结果如下。

分析为什么黑色椭圆比红色椭圆更偏右偏下。

6

2.3编程,实现下图界面。

8

3事件驱动程序设计9

3.1预备知识9

3.1编程实现:

单击按钮,打开文件对话框。

10

3.2命题编程,实现在窗口中用鼠标拖动画线。

12

3.3命题编程,在窗口中画圆,并用键盘方向键移动它,或者用鼠标拖动它。

12

一、实验目的

  通过编程和上机实验,验证图形界面的外观构成、绘图、事件驱动。

awt和swing类库中常见类的基本使用;了解绘图方法;理解事件驱动程序设计。

二、实验要求

1、编写程序,验证图形界面的外观构成。

(swing库的框架、容器、组件;并验证3种布局管理器)

2、编写程序,验证绘图方法。

3、编写程序,验证事件驱动程序设计的方法。

(了解图形用户界面的事件响应机制,并能进行常用的事件处理,如按钮事件、键盘事件、窗口事件等)

三、实验内容

1.图形界面外观设计实验

1.1预备知识

●  顶层容器Swing提供三个顶层容器的类

JFrame实现单个主窗口

JDialog实现一个对话框

JApplet在浏览器窗口中实现一个applet显示区域

● 中间层容器:

其存在的目的仅仅是为了容纳别的组件

JPanelJScrollPaneJSplitPaneJTabbedPaneJToolBar

● 原子组件:

通常用来和用户交互,而不像前两种组件那样是用来容纳别的组件的;当然前2组也可以交互。

–根据功能的不同,可被分为三类:

●显示不可编辑信息的JLabel、JProgressBar、JToolTip

●有控制功能、可以用来输入信息的JButton、JCheckBox、JRadioButton、JComboBox、JList、JMenu、JSlider、JSpinner、JTexComponent等

●能提供格式化的信息并允许用户选择的JColorChooser、JFileChooser、JTable、JTree

FlowLayout是JPanel默认使用的布局管理器,它只是简单地把组件放在一行,如果容器不是足够宽来容纳所有组件,就会自动开始新的一行。

组件的大小要看上面文字的长度和字体。

窗口变大,组件不会随着变大。

下面2个布局管理器:

窗口变大,组件会随着变大。

因为每个组件占据一个区域,它会把分给它的区域占满。

GridLayout将按照其构造方法中程序员提供的行数和列数将界面分为等大的若干块,组件被等大地按加载顺序放置其中。

BorderLayout以将组件放置到五个区域:

东、西、南、北、中。

它是JFrame等顶级容器的默认布局管理器。

布局管理器的使用方法是通过调用容器对象的setLayout方法,并以某种布局管理器对象为参数,例如:

假设myFrame是窗口类对象

myFrame.setLayout(newFlowLayout());

1.2建立窗口。

运行下面的3个程序,比较它们的区别。

(1)

importjavax.swing.*;

publicclassTest{

publicstaticvoidmain(String[]args){

JFramef=newJFrame("hello");

f.setVisible(true);

}

}

(2)

importjavax.swing.*;

classMyFrameextendsJFrame{

MyFrame(Strings){

super(s);//或setTitle(s);

setVisible(true);

}

}

publicclassTest{

publicstaticvoidmain(String[]args){

newMyFrame("hello");

}

}

(3)

importjavax.swing.*;

publicclassTestextendsJFrame{

publicstaticvoidmain(String[]args){

Testf=newTest("hello");

f.setVisible(true);

}

Test(Strings){

super(s);//或setTitle(s);

}

}

1.3框架(窗口)的结构

JFrameJDialogJApplet等顶级容器自带一个JRootPane类的对象

JRootPane对象由3个成员组成:

一个Container类的对象ContentPane(内容面板)

一个JMenuBar类的对象【可选】

一个glassPane,捕获鼠标移动等事件

在窗口上添加按钮,实际是添加在内容面板上。

(1)下面的程序,在窗口中添加菜单栏。

importjavax.swing.*;

classMyFrameextendsJFrame{

MyFrame(Strings){

setTitle(s);

JMenumFile,mEdit,mHelp;

mFile=newJMenu("文件");mEdit=newJMenu("编辑");mHelp=newJMenu("帮助");

JMenuItemfileNew,fileOpen;

fileNew=newJMenuItem("新建");fileOpen=newJMenuItem("打开");

mFile.add(fileNew);mFile.add(fileOpen);

JMenuBarmyJMenuBar=newJMenuBar();

myJMenuBar.add(mFile);myJMenuBar.add(mEdit);myJMenuBar.add(mHelp);

setJMenuBar(myJMenuBar);//不要用add方法

setVisible(true);

}

}

publicclassTest{

publicstaticvoidmain(String[]args){

MyFramef=newMyFrame(“菜单栏演示");

f.setBounds(100,100,400,400);

}

}

(2)窗口的客户区被内容面板盖住了。

验证下面的代码。

JFramef=newJFrame("MyFrame");

JLabellb=newJLabel(“Pleaseinputname”);

f.add(lb);等价于f.getRootPane().getContentPane().add(lb);

等价于f.getContentPane().add(lb);

f.setBackground(Color.red);//语法正确,但为什么颜色没有改变?

f.getRootPane().getContentPane().setBackground(Color.red);//可以

f.getContentPane().setBackground(Color.red);//可以

(3)验证下面的代码

f.setBackground(Color.red);

f.getContentPane().setVisible(false);

(4)验证下面的代码

f.setBackground(Color.red);

f.getRootPane().setVisible(false);

1.4向窗口添加组件。

思考退出按钮为何在取消按钮之前。

importjavax.swing.*;

importjava.awt.*;

publicclassMyFrameextendsJFrame{

JButtonbtOK=newJButton("确认");

JButtonbtCancel=newJButton("取消");

JButtonbtExit=newJButton("退出");

MyFrame(Strings){

setTitle(s);

setLayout(newFlowLayout());

add(btOK);//追加到末尾

add(btCancel);//追加到末尾

add(btExit,1);//插入到指定下标处,和ArrayList一样

setDefaultCloseOperation(EXIT_ON_CLOSE);

setVisible(true);

setBounds(100,100,400,400);

}

publicstaticvoidmain(String[]args){

newMyFrame("这里是标题栏");

}

}

1.5自行编程验证3种布局管理器的特性。

1.6编写程序,框架用JFrame;容器用JPanel,有2个;原子组件有3个按钮、2个JLabel。

请用三种布局分别实现。

2.绘图实验

2.1预备知识

所有组件都可以用paint(Graphicsg)绘图

组件如果不是JComponent的子类,例如JFrame,只能用paint绘图

对于JComponent的子类组件,例如JPanel,JButton,既可以用paint,也可以用paintComponent。

为效率计,用后者更好。

如果用paint(Graphicsg),调用父类的绘图时,记得也用super.paint(g);

如果用paintComponent(Graphicsg),调用父类的绘图时,记得也用super.paintComponent(g);

2.2运行下面的程序。

输出结果如下。

分析为什么黑色椭圆比红色椭圆更偏右偏下。

importjavax.swing.*;

importjava.awt.*;

classMyPanelextendsJPanel{

protectedvoidpaintComponent(Graphicsg){

super.paintComponent(g);

g.drawOval(30,30,100,50);

}

}

classMyButtonextendsJButton{

protectedvoidpaintComponent(Graphicsg){

super.paintComponent(g);

g.drawOval(30,30,100,50);

}

MyButton(Strings){

super(s);

}

}

publicclassMyFrameextendsJFrame{

MyButtonbtOK=newMyButton("确认");

MyPanelmyPanel=newMyPanel();

MyFrame(Strings){

setContentPane(myPanel);

setTitle(s);

setLayout(null);

btOK.setBounds(100,100,100,100);

btOK.add(newJButton("s"));//按钮btOK里又放一个按钮

add(btOK);//

setDefaultCloseOperation(EXIT_ON_CLOSE);

setVisible(true);

setBounds(100,100,400,300);

}

publicvoidpaint(Graphicsg){

super.paint(g);

g.setColor(Color.red);

g.drawOval(30,30,100,50);

}

publicstaticvoidmain(String[]args){

newMyFrame("这里是标题栏");

}

}

2.3编程,实现下图界面。

//用各种颜色绘制文字及各种图形

importjava.awt.*;

importjavax.swing.*;

publicclassE2_3extendsJFrame{

publicE2_3(){

super("演示字体、颜色、绘图");//调用基类构造方法

setSize(480,250);//设置窗口大小

setVisible(true);//显示窗口

}

publicvoidpaint(Graphicsg){

super.paint(g);//callsuperclass'spaintmethod

g.setFont(newFont("SansSerif",Font.BOLD,12));

g.setColor(Color.blue);//设置颜色

g.drawString("字体ScanSerif,粗体,12号,蓝色",20,50);

g.setFont(newFont("Serif",Font.ITALIC,14));

g.setColor(newColor(255,0,0));

g.drawString("字体Serif,斜体,14号,红色",250,50);

g.drawLine(20,60,460,60);//绘制直线

g.setColor(Color.green);

g.drawRect(20,70,100,50);//绘制空心矩形

g.fillRect(130,70,100,50);//绘制实心矩形

g.setColor(Color.yellow);

g.drawRoundRect(240,70,100,50,50,50);//绘制空心圆角矩形

g.fillRoundRect(350,70,100,50,50,50);//绘制实心圆角矩形

g.setColor(Color.cyan);

g.draw3DRect(20,130,100,50,true);//绘制突起效果空心矩形

g.fill3DRect(130,130,100,50,false);//绘制凹陷效果实心矩形

g.setColor(Color.pink);

g.drawOval(240,130,100,50);//绘制空心椭圆

g.fillOval(350,130,100,50);//绘制实心椭圆

g.setColor(newColor(0,120,20));

g.drawArc(20,190,100,50,0,90);//绘制一段圆弧

g.fillArc(130,190,100,50,0,90);//绘制扇形

g.setColor(Color.black);

intxValues[]={250,280,290,300,330,310,320,290,260,270};

intyValues[]={210,210,190,210,210,220,230,220,230,220};

g.drawPolygon(xValues,yValues,10);//绘制空心多边形

intxValues2[]={360,390,400,410,440,420,430,400,370,380};

g.fillPolygon(xValues2,yValues,10);//绘制实心多边形

}

publicstaticvoidmain(Stringargs[]){

E2_3application=newE2_3();

application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

3事件驱动程序设计

3.1预备知识

(1)事件处理步骤

A.定义类实现事件监听器接口

例如,ActionListener是动作事件监听器接口,定义如下:

interfaceActionListener

{publicabstractvoidactionPerformed(ActionEvente);}

如果名为Myclass的类要处理动作事件,就要定义Myclass类实现ActionListener接口。

要建立处理事件的类,需要说明类实现事件监听器接口,说明格式如下:

publicclass类名implements监听器接口名列表

在实现事件监听器接口的类中为抽象方法编写代码。

例如,在Myclass类中为ActionListener接口的actionPerformed()方法编写语句。

publicvoidactionPerformed(ActionEvente)

{填写处理动作事件的语句}

B.将产生事件的组件注册为事件监听器

如果希望组件产生事件时能够得到响应,应将产生事件的组件注册为事件监听器,注册的语句如下:

组件名.addXXXListener(实现事件监听器接口的类对象);

XXX代表事件类型。

例如,假设Myclass是实现ActionListener接口的类。

将Myclass类对象注册为事件监听器,对应语句如下:

组件名.addActionListener(newMyclass());

也可以使用关键字this。

如,组件名.addActionListener(this)。

(2)鼠标事件和键盘事件的具体处理

vMouseListener接口:

mousePressed(MouseEvente):

鼠标键被按下时调用;

mouseReleased(MouseEvente):

鼠标键被释放时调用;

mouseClicked(MouseEvente):

合并上述两个事件为一次鼠标点击事件;

mouseEntered(MouseEvente):

鼠标进入事件;

mouseExited(MouseEvente):

鼠标离开事件。

getX()和getY()方法:

得到鼠标点击时x和y坐标。

getClickCount()方法:

可以区别单击操作和双击操作。

vMouseMotionListener接口:

mouseMoved(MouseEvente):

鼠标移动;

mouseDragged(MouseEvente):

用户拖动鼠标。

(3)键盘事件

KeyListener接口中有三个方法:

publicvoidkeyPressed(KeyEvente)

publicvoidkeyReleased(KeyEvente)

publicvoidkeyTyped(KeyEvente)

3.1编程实现:

单击按钮,打开文件对话框。

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

classwinextendsJFrame{

staticwinfe=null;

JButtonbt1=newJButton("退出"),

bt2=newJButton("打开文件"),

bt3=newJButton("保存文件");

win(){this("");}

win(Stringstr){

super(str);

setLayout(newFlowLayout());

add(bt1);

add(bt2);

add(bt3);

setSize(200,150);

setVisible(true);

setDefaultCloseOperation(EXIT_ON_CLOSE);

MyActionListenerlisten=newMyActionListener();

bt1.addActionListener(listen);

bt2.addActionListener(listen);

bt3.addActionListener(listen);

}

//----------------------------------------------------------

classMyActionListenerimplementsActionListener{

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==bt1){

dispose();

System.exit(0);

}

if(e.getSource()==bt2){

JFileChooserfd1=newJFileChooser("C:

\\");//JFileChooser是新的文件对话框

fd1.showOpenDialog(fe);

}

if(e.getSource()==bt3){

FileDialogfd2=newFileDialog(fe,"请输入保存",FileDialog.SAVE);//FileDialog已过时,你可以查询JFileChooser类,自行修改

fd2.show();

}

}

}

}

//----------------------------------------------------------

publicclassE3_1{//主类

publicstaticvoidmain(Stringargs[]){

winfe=newwin("文件对话框");

win.fe=fe;

fe.setBackground(Color.blue);

}

}

3.2命题编程,实现在窗口中用鼠标拖动画线。

(提示,鼠标的监听接口有2个,MouseListener和MouseMotionListener。

因为鼠标划线涉及到“按”、“放”、“拖动”等事件,其中拖动需要MouseMotionListener

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2