




免费预览已结束,剩余4页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验:图形界面设计(executable jar file)实验目的:Java有三个主要的图形界面工具:AWT,Swing和SWT。Swing 是构建java图形界面标准的API(应用程序接口)。SWT是一个非常有前途的新的窗体工具,由IBM资助。但是事实上,这三者相互补充,他们满足不同的需求。抽象窗口工具集为简单的applet程序设计,它不适宜用来构建丰富的桌面图形界面。但是从开始被介绍,它至少有一个好的思想就是布局管理,它负责为组件找到一个放置的位置,这种机制是必需的,因为GUI组件在不同的操作系统中有不同的尺寸。 现在, AWT扩展了组件模型和事件处理机制(由JavaBeans说明定义),新的图形API(称为Java 2D),支持剪贴板和拖拉操作,打印,准入,和新的GUI工具Swing,所有这些都归到Java基础类中(JFC)。它有一套完全的组件从按钮到文件域到表格,树型和文件编辑器。这些组件不依赖于操作系统本地的部件,而是用原始的图形像直线、矩形、文字画出。这种画代表感观插件,它能够模仿本地的感观。 Swing也有平台无关的外观称为Metal。 Swing的结构由MVC模式得到启发,这里在屏幕上的视觉GUI组件和支持数据的模型对象之间有一个明显的分隔,在GUI和数据层之间的通讯基于事件。本实验利用Swing实现简单的聊天程序的界面。实验对应知识点:Swing的API,JavaBean中的绑定的属性。实验前任务:预习有关Swing、JavaBean的章节内容。实验步骤:一、 创建一个聊天程序的界面该聊天程序包括一个Frame,其中包括一个不可编辑的文本框,用来显示聊天的内容,一个JTabbedPane用来切换“公聊”(public)和“私聊”(private)的内容,两个标签(label),一个JComboBox用来显示当前在线的用户,一个输入框用来输入聊天的内容,还有一个发送聊天信息的按钮。只有当用户选择了某个在线用户发送聊天信息时,内容才会显示到“私聊”的文本框上,否则聊天内容显示到“公聊”的文本框上。图形用户界面见图 6.1。图 6.1程序模板:/* * ChatDisplay.java * author YourName */package YourPackageName;import java.beans.*;import javax.swing.*;import javax.swing.event.*;import java.io.*;import java.awt.*;import java.awt.event.*;import java.util.*;/* * ChatDisplay is a user interface to display chat messages. * User can add and remove a chat user, display a message in a ChatDisplay * or send a message to the ChatDisplay. If there is an error, nothing happens. */public class ChatDisplay extends JPanel implements Serializable, ActionListener, ChangeListener /* indicate the default user, who is sending messages */ private String mySelf; /*manages the PropertyChangeListener and informs them on change of property */ private PropertyChangeSupport propertySupport; /* main panel that contains the complete ChatDisplay */ private JPanel interfacePanel; /* user panel mainly containing user combo box */ private JPanel userPanel; /* the label user for the user selection combo box */ private JLabel userLabel; /* combo box containing list of users */ private JComboBox userComboBox; /* message panel that contains the components required to send messages */ private JPanel messagePanel; /*send message text box label */ private JLabel messageLabel; /* send message button */ private JButton sendButton; /* textfield contains the message that the user wants to send */ private JTextField messageText; /* tabbed pane includes public and private chat */ private JTabbedPane textTabbedPane; /* The scroll pane contain the public pane */ private JScrollPane publicScrollPane; /* The public chat pane */ private JTextPane publicTextPane; /* The public text message */ private String publicText; /* The scroll pane containg private chat pane */ private JScrollPane privateScrollPane; /* The text pane containing private messages */ private JTextPane privateTextPane; /* The private chat message*/ private String privateText; /* type of the pane public or private chat */ private int paneType; /* user vector */ private Vector usersVector; 二、 使用JavaBean的事件模型实现聊天界面互发消息在一个Bean中设置关联属性的基本步骤如下:1、调入java.beans 包,以便访问该包中所定义的一些方便类。MyButton中的import语句的使用方法如下:import java.beans.*; 2、实例化java.beans.PropertyChangeSupport类。private PropertyChangeSupport changes = new PropertyChangeSupport(this);MyButton创建了一个名为changes的新对象,它是PropertyChangeSupport类的实例,变量changes保存的是监听对象的集合,一旦关联属性发生变化,就会通知到这些对象。该变量定义了两个支持的方法: addPropertyChangeListener和 removePropertyChangeListener,这两个方法提供了公共的接口,可以让感兴趣的监听者对MyButton进行注册。3、实现由PropertyChangeSupport 类定义的方法。PropertyChangeSupport类包含了添加和移去监听对象的方法,尤其是PropertyChangeListener对象。AddPropertyChangeListener方法添加一个新的监听对象到表中,而removePropertyChangeListener方法则从表中移去一个监听对象。PropertyChangeSupport 类也包含第三个方法:firePropertyChange,该方法把PropertyChangeEvent对象发送给感兴趣的监听者。MyButton包含的实现添加和移去监听者方法的代码如下:注意:参数l 表示property change listener Bean,该Bean可以作为注册或者移去其兴趣。public void addPropertyChangeListener( PropertyChangeListener l) changes.addPropertyChangeListener(l);public void removePropertyChangeListener( PropertyChangeListener l) changes.removePropertyChangeListener(l);4、修改Bean的关联属性的setter方法。对于那些打算成为关联属性的属性,可以修改Bean的setter方法,以便包含当属性值变化时就发送事件的代码。MyButton在每一个设置新属性值的方法内调用firePropertyChange方法。例如,当一个应用程序或者用户改变了按钮的字体时,这个动作就执行了MyButton.setFont方法。因为firePropertyChange方法对于变化了的属性的新值和旧值都需要, setFont方法首先通过调用getFont方法获得旧值,之后设置新值,改变了原先的值之后,再调用changes.firePropertyChange方法通知感兴趣的监听者。changes.firePropertyChange方法传递了三个参数:发生变化的属性名,属性的旧值,该属性的新值。public void setFont(Font f) Font old = getFont(); super.setFont(f); sizeToFit(); changes.firePropertyChange(font, old, f);对于firePropertyChange方法来说,它完成了哪些事情?该方法把它的三个参数绑定到一个PropertyChangeEvent对象中。之后把PropertyChangeEvent对象作为参数,调用propertyChange方法。把PropertyChangeEvent对象传递给每个注册过的监听者。记住:propertyChange把属性的旧值和新值作为对象值对待。这一点很重要,如果你的属性值是个简单类型,你就必须对该类型重新定义为对象,例如,一个简单的整数类型,在调用firePropertyChange之前,就要转化为java.lang.Integer。对于关联属性来说,首先是属性值发生变化,之后才发送属性变化事件。 在本实验中创建一个Test类,在其main方法中实例化两个ChatDisplay,chatA和chatB,使chatA发送的公聊消息显示在chatB的公聊文本框中,私聊消息(不管具体的用户)显示在相应的私聊文本框中。反之亦然。程序模板:package yourPackageName;/* * Test.java * author yourName */import java.io.*;import java.lang.*;import java.util.*;import javax.swing.*;import javax.swing.text.*;import javax.swing.SwingConstants;import java.awt.*;import java.awt.event.*;import java.awt.Dimension;import java.awt.GridBagLayout;import java.awt.GridBagConstraints;import java.beans.*;/* * Test.java is a standalone Java application that takes no * command line arguments. * The application creates two ChatDisplay instances,then creates two frames, * one(frameClient) holds one of the instance of the ChatDisplay and * another(frameServer) integrates a JTextField, a remove button, and a add * button with another instance of ChatDisplay. The frameClient can send private * or public messages to and receive public or private messages from * frameServer. The frameServer can do all the frameClient can. */public class Test implements PropertyChangeListener,Serializable,ActionListener/*Instance of the ChatDisplay to act as a tester*/private ChatDisplay server;/*Instance of the ChatDisplay to act as a client*/private ChatDisplay client;/* Creates a new instance of Homework06. */public Test ()JFrame frameClient = new JFrame(Chat Display);client = new ChatDisplay(chatA);frameClient.getContentPane().add(client, BorderLayout.CENTER);frameClient.setSize(new Dimension(500, 400);frameClient.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); frameClient.show();JFrame frameServer = new JFrame(Chat Display);server = new ChatDisplay(chatB);frameServer.getContentPane().add(server, BorderLayout.CENTER);frameServer.setSize(new Dimension(300, 400);frameServer.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); );frameServer.setSize(new Dimension(400, 500); frameServer.show();/*Your code goes here*/*Creates an instance of Test. */public static void main(String args) /*Your code goes here*/ 三、将程序打包为可执行的jar文件 1、JAR 文件包 JAR 文件就是 Java Archive File,顾名思意,它的应用是与 Java 息息相关的,是 Java 的一种文档格式。JAR 文件非常类似 ZIP 文件准确的说,它就是 ZIP 文件,所以叫它文件包。JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的。举个例子,如果我们具有如下目录结构的一些文件: = - test - Test.class 把它压缩成 ZIP 文件 test.zip,则这个 ZIP 文件的内部目录结构为: test.zip - test - Test.class 如果我们使用 JDK 的 jar 命令把它打成 JAR 文件包 test.jar,则这个 JAR 文件的内部目录结构为: test.jar |- META-INF | - MANIFEST.MF - test -Test.class 2、 创建可执行的 JAR 文件包 制作一个可执行的 JAR 文件包来发布你的程序是 JAR 文件包最典型的用法。 Java 程序是由若干个 .class 文件组成的。这些 .class 文件必须根据它们所属的包不同而分级分目录存放;运行前需要把所有用到的包的根目录指定给 CLASSPATH 环境变量或者 java 命令的 -cp 参数;运行时还要到控制台下去使用 java 命令来运行,如果需要直接双击运行必须写 Windows 的批处理文件 (.bat) 或者 Linux 的 Shell 程序。因此,许多人说,Java 是一种方便开发者苦了用户的程序设计语言。 其实不然,如果开发者能够制作一个可执行的 JAR 文件包交给用户,那么用户使用起来就方便了。在 Windows 下安装 JRE (Java Runtime Environment) 的时候,安装文件会将 .jar 文件映射给 javaw.exe 打开。那么,对于一个可执行的 JAR 文件包,用户只需要双击它就可以运行程序了,和阅读 .chm 文档一样方便 (.chm 文档默认是由 hh.exe 打开的)。那么,现在的关键,就是如何来创建这个可执行的 JAR 文件包。 创建可执行的 JAR 文件包,需要使用带 cvfm 参数的 jar 命令,同样以上述 test 目录为例,命令如下: jar cvfm test.jar manifest.mf test 这里 test.jar 和 manifest.mf 两个文件,分别是对应的参数 f 和 m,其重头戏在 manifest.mf。因为要创建可执行的 JAR 文
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北省井陉县2025年上半年公开招聘辅警试题含答案分析
- 福建省清流县2025年上半年公开招聘辅警试题含答案分析
- 江西省永修县2025年上半年公开招聘辅警试题含答案分析
- 吉林省伊通满族自治县2025年上半年公开招聘辅警试题含答案分析
- 2025年能源行业智能电网在数字化转型中的能源互联网优化报告
- 小王子读后感(三篇)
- 内蒙古包头市2025届高三上学期起点考试语文试题(含答案)
- 牧运通官方兽医试题题库含完整答案详解(网校专用)
- 二零二五年度建筑防水材料施工技术合同规范
- 二零二五年度酒水品牌加盟连锁经营合同书
- 吉安市新庐陵投资发展有限公司及下属子公司2025年第二批面向社会公开招聘笔试备考题库及答案解析
- 2025至2030年中国生长激素行业市场深度研究及投资战略规划报告
- 大疆:2025大疆机场3操作指导书
- 2025年12345热线考试题库
- 2025年卫生健康行业经济管理领军人才试题
- 绿色矿山培训课件
- hiv职业暴露培训课件
- 2025年重庆市高考物理试卷(含答案解析)
- 小番茄栽培技术课件
- 女职工普法宣传教学课件
- (高清版)DB22∕T 5159-2024 预应力混凝土桩基础技术标准
评论
0/150
提交评论