高级java实验报告GUI设计.docx

上传人:b****5 文档编号:29033230 上传时间:2023-07-20 格式:DOCX 页数:25 大小:144.01KB
下载 相关 举报
高级java实验报告GUI设计.docx_第1页
第1页 / 共25页
高级java实验报告GUI设计.docx_第2页
第2页 / 共25页
高级java实验报告GUI设计.docx_第3页
第3页 / 共25页
高级java实验报告GUI设计.docx_第4页
第4页 / 共25页
高级java实验报告GUI设计.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

高级java实验报告GUI设计.docx

《高级java实验报告GUI设计.docx》由会员分享,可在线阅读,更多相关《高级java实验报告GUI设计.docx(25页珍藏版)》请在冰豆网上搜索。

高级java实验报告GUI设计.docx

高级java实验报告GUI设计

实验报告

 

课程名称高级java程序设计

实验项目实验3Java高级GUI

实验仪器

 

系别计算机学院

专业软件工程

班级/学号

实验日期

成绩

指导教师

【实验名称】实验3Java高级GUI

【实验目标】1、学习和掌握JavaBeans的基本实现方法和应用情形。

2、学习和掌握MVC模式以及实现方法。

3、学习和了解Java提供的各种容器、组件及其应用效果。

【实验日期和时间记录】实验日期12月

【实验预习】1、学习和掌握基本程序的结构和实现方法。

2、学习和掌握JavaBeans和MVC的基本概念和实现方法。

3、在基本程序的基础上,使用新的技术,实现更复杂的程序

【实验过程及结果记录】

1、(信息面板MessagePanel触发事件ActionEvent)在程序清单15.7-.8中(上册P414-418,“15.9实例学习:

MessagePanel类”一节),信息面板类MessagePanel是JPanel类的一个类,它可以触发事件MouseEvent、KeyEvent和ComponentEvent,但不能触发ActionEvent。

修改MessagePanel类,使得单击它的实例时能够触发ActionEvent事件。

将新类命名为MessagePanelWithActionEvent。

使用一个Applet来测试该类,单击信息面板时在其中显示当前时间

实验结果:

2、(修改CircleController)根据程序清单35.1-35.4,

CircleController用文本域获取新的半径,用组合框获取表明圆是

否是实心的布尔值。

在CircleController中加入一行,使用户可以

用JColorChooser组件选择颜色,如图3.2所示。

新的行包括写有文本Color的标签,要显示颜色的标签和一个省略号按钮。

用户可以通过单击省略号按钮来显示JColorChooser对话框。

一旦用户选择了颜色,颜色便显示在省略号按钮左边面板的背景上。

说明:

程序实现的基本思路和方法。

(1)学习程序清单35.1-35.4,MVC程序的构造以及测试方法。

(2)对CircleController(程序清单35.3P402)进行相应的

修改,包括:

静态GUI的修改,增加颜色控制组件;动态事件处理

的修改,增加对颜色控制按钮的事件处理,弹出颜色选择对话框,

选择颜色,使用该颜色设置颜色标签,反映颜色变化。

(3)对CircleController进行修改,在颜色控制按钮的事件

处理中,使用控制器得到的用户颜色,修改对应的CircleModel对

象的颜色属性设置。

(4)运行程序,启动用户测试程序MVCDemo.java(程序清单

35.4,教材P403),分别打开控制器和视图,观察控制器是如何控

制视图变化的。

实验结果

【实验总结】

对于自身薄弱的GUI知识有了进一步的理解,对于如何实现逻辑功能与界面结合有了自己的一套方法。

并能利用javabeans和mvc解决一些问题。

【思考题的思考】

【思考题】

1、JavaBeans的基本结构要求有哪些?

MessagePanel是

JavaBeans组件(类)吗?

什么是源组件?

MessagePanel是源组件吗?

JavaBeans一定是源组件吗?

反之,源组件一定是JavaBeans吗?

JavaGUI组件是JavaBeans吗?

是源组件吗?

答:

bean必须是公共类,尽管bean可能有其他的构造方法,但是必要时必须有一个公共的无参构造方法,bean必须实现java.io.Serializable,以确保其持续性。

等等;不是;源组件包含用于检测引发事件外部或内部动作的代码。

不是;不一定;不是;不是;不是;

2、如何创建一个自定义的源组件?

答:

先定义事件接口——》检测事件——》通过调用向量中每个监听器的事件处理器来出发和处理事件

3、在练习2的MVC实现中,Controller如何从用户获得信息、

修改Model?

Model是如何将状态变化通知给View?

View是如何根据Model变化来进行相应地显示的?

这个MVC的起点在哪里?

答:

jtfRadius.getText()).doubleValue()从输入中获取。

然后修改model.setFilled(

((Boolean)jcbFilled.getSelectedItem()).booleanValue()。

通知给view:

if(model.isFilled())

{

g.fillOval(xCenter-radius,yCenter-radius,2*radius,2*radius);

}

else

{

g.drawOval(xCenter-radius,yCenter-radius,2*radius,2*radius);

}

【附:

程序代码】

习题1:

MessagePanelWithActionListener类:

packagesy3;

importjava.awt.Dimension;

importjava.awt.FontMetrics;

importjava.awt.Graphics;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.awt.event.MouseEvent;

importjava.awt.event.MouseListener;

importjava.util.ArrayList;

importjavax.swing.JPanel;

publicclassMessagePanelWithActionListenerextendsJPanelimplementsMouseListener

{

privateStringmessage="WelcometoJava";

privateintxCoordinate=20;

privateintyCoordinate=20;

privatebooleancentered;

privateintinterval=10;

privateArrayListactionListenerList;

publicMessagePanelWithActionListener()

{

this.addMouseListener(this);

}

publicMessagePanelWithActionListener(Stringmessage)

{

this.message=message;

this.addMouseListener(this);

}

publicvoidsetMessage(Stringmessage)

{

this.message=message;

repaint();

}

publicintgetXCoordinate()

{

returnxCoordinate;

}

publicintgetYCoordinate()

{

returnyCoordinate;

}

publicvoidsetXCoordinate(intx)

{

this.xCoordinate=x;

repaint();

}

publicvoidsetYcoordinate(inty)

{

this.yCoordinate=y;

repaint();

}

publicbooleanisCentered()

{

returncentered;

}

publicvoidsetCentered(booleancentered)

{

this.centered=centered;

repaint();

}

publicintgetInterval()

{

returninterval;

}

publicvoidsetInterval(intinterval)

{

this.interval=interval;

}

protectedvoidpaintComponent(Graphicsg)

{

super.paintComponent(g);

if(centered)

{

FontMetricsfm=g.getFontMetrics();

intstringWidth=fm.stringWidth(message);

intstringAscent=fm.getAscent();

xCoordinate=getWidth()/2-stringWidth/2;

yCoordinate=getHeight()/2-stringAscent/2;

}

g.drawString(message,xCoordinate,yCoordinate);

}

publicvoidmoveLeft()

{

xCoordinate-=interval;

repaint();

}

publicvoidmoveRight()

{

xCoordinate+=interval;

repaint();

}

publicvoidmoveUp()

{

yCoordinate-=interval;

repaint();

}

publicvoidmoveDown()

{

yCoordinate+=interval;

repaint();

}

publicDimensiongetPreferredSize()

{

returnnewDimension(200,30);

}

publicsynchronizedvoidaddActionListener(ActionListenerlistener)

{

if(actionListenerList==null)

{

actionListenerList=newArrayList

(2);

}

if(!

actionListenerList.contains(listener))

{

actionListenerList.add(listener);

}

}

publicsynchronizedvoidremoveActionListener(ActionListenerlistener)

{

if(actionListenerList!

=null&&actionListenerList.contains(listener))

{

actionListenerList.remove(listener);

}

}

publicvoidmouseClicked(MouseEvente){

//TODOAuto-generatedmethodstub

processEvent(newActionEvent(this,ActionEvent.ACTION_PERFORMED,null));

}

publicvoidmousePressed(MouseEvente){

//TODOAuto-generatedmethodstub

}

publicvoidmouseReleased(MouseEvente){

//TODOAuto-generatedmethodstub

}

publicvoidmouseEntered(MouseEvente){

//TODOAuto-generatedmethodstub

}

publicvoidmouseExited(MouseEvente){

//TODOAuto-generatedmethodstub

}

privatevoidprocessEvent(ActionEvente)

{

ArrayListlist;

synchronized(this)

{

if(actionListenerList==null)

{

return;

}

list=(ArrayList)actionListenerList.clone();

}

for(inti=0;i

{

ActionListenerlistener=(ActionListener)list.get(i);

listener.actionPerformed(e);

}

}

}

TestMessagePanelWithMouseListener类:

packagesy3;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjavax.swing.*;

importjavax.swing.JApplet;

 

publicclassTestMessagePanelWithMouseListenerextendsJApplet{

privateMessagePanelWithActionListenermessagePanel=newMessagePanelWithActionListener();

publicTestMessagePanelWithMouseListener()

{

this.add(messagePanel);

messagePanel.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEvente)

{

messagePanel.setCentered(true);

messagePanel.setMessage(newjava.util.Date().toString());

}

});

}

publicstaticvoidmain(String[]args)

{

JAppletapplet=newTestMessagePanelWithMouseListener();

JFrameframe=newJFrame("TestMessagePanelWithMouseListener");

frame.add(applet);

frame.setSize(300,200);

frame.setLocationRelativeTo(null);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

}

习题2:

CircleModel类:

packagesy3;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.util.ArrayList;

 

publicclassCircleModel{

privatedoubleradius=20;

privatebooleanfilled;

privatejava.awt.Colorcolor;

privateArrayListactionListenerList;

publicdoublegetRadius()

{

returnradius;

}

publicvoidsetRadius(doubleradius)

{

this.radius=radius;

processEvent(newActionEvent(this,ActionEvent.ACTION_PERFORMED,"radius"));

}

publicbooleanisFilled()

{

returnfilled;

}

publicvoidsetFilled(booleanfilled)

{

this.filled=filled;

processEvent(newActionEvent(this,ActionEvent.ACTION_PERFORMED,"filled"));

}

publicjava.awt.ColorgetColor()

{

returncolor;

}

publicvoidsetColor(java.awt.Colorcolor)

{

this.color=color;

processEvent(newActionEvent(this,ActionEvent.ACTION_PERFORMED,"color"));

}

publicsynchronizedvoidaddActionListener(ActionListenerl)

{

if(actionListenerList==null)

{

actionListenerList=newArrayList();

}

actionListenerList.add(l);

}

publicsynchronizedvoidremoveActionListener(ActionListenerl)

{

if(actionListenerList!

=null&&actionListenerList.contains(l))

{

actionListenerList.remove(l);

}

}

privatevoidprocessEvent(ActionEvente)

{

ArrayListlist;

synchronized(this)

{

if(actionListenerList==null)

{

return;

}

list=(ArrayList)actionListenerList.clone();

}

for(inti=0;i

{

ActionListenerlistener=(ActionListener)list.get(i);

listener.actionPerformed(e);

}

}

}

CircleController类:

packagesy3;

importjava.awt.BorderLayout;

importjava.awt.Color;

importjava.awt.GridLayout;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjavax.swing.JButton;

importjavax.swing.JColorChooser;

importjavax.swing.JComboBox;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JPanel;

importjavax.swing.JTextField;

 

publicclassCircleControllerextendsJPanel{

privateCircleModelmodel;

privateJTextFieldjtfRadius=newJTextField();

privateJComboBoxjcbFilled=newJComboBox(newBoolean[]{newBoolean(false),newBoolean(true)});

privateJButtonjbColor=newJButton("...");

privateJColorChooserjcc=newJColorChooser();

publicCircleController()

{

JPanelpanel1=newJPanel();

panel1.setLayout(newGridLayout(2,1));

panel1.add(newJLabel("Radius"));

panel1.add(newJLabel("Filled"));

JPanelpanel2=newJPanel();

panel2.setLayout(newGridLayout(2,1));

panel2.add(jtfRadius);

panel2.add(jcbFilled);

JPanelpanel3=newJPanel();

finalJPanelpanelColor=newJPanel();

panel3.setLayout(newGridLayout(1,3));

panel3.add(newJLabel("Color"));

panel3.add(panelColor);

panel3.add(jbColor);

setLayout(newBorderLayout());

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

当前位置:首页 > IT计算机 > 互联网

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1