版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 实现客户端界面,本章学习要点:,了解Java图形界面编程方法;,Java Swing包的使用;,掌握实现聊天室客户端编程所必须的基本知识与技能;,4.1 需求分析,作为在线网络聊天室,要完成如下的功能:,实现一个用户聊天的软件运行界面。,通过这个界面在线用户应该能够输入聊天信息。,在线用户也应该能够看到所有其他用户发出的聊天信息。,4.2确定任务单 :,任务:通过对需求的理解,经过分析,可以初步得出客户端界面大致如下图所示:,图4.1 聊天室客户端界面,4.3 任务:完成客户端窗口界面,一、确定步骤:,二、分析步骤:,1、确定登录窗口界面所用到的控件 预备知识,Swing是AWT的扩展
2、,它提供了许多新的图形界面组件。Swing组件以J开头,除了有与AWT类似的按钮(JButton)、标签(JLabel)、复选框(JCheckBox)、菜单(JMenu)等基本组件外,还增加了一些丰富的高层组件,如表格(JTable)、树(JTree)。,Java中常用的Swing组件如下表所示:,swing各组件功能及操作方法简介:,1)JFrame类创建窗口 JFrame可为应用程序构建主框架,JFrame类继承了Frame类。 Component :抽象类,归纳了所有图形用户界面上的组件。 Containter:容器也是组件,特别的是容器中可以容放组件。 构造方法,JFrame 提供了两
3、个方法:getContentPane 和 setContentPane 就是用 于获取和设置其 Content Pane 的。,JFrame的设置和显示方法,在JFrame窗口中加入组件,frame.getContentPane().add(childComponent),a)用getContentPane( )方法获得JFrame的内容面板,再对其加入组件:,b)建立一个JPanel或 JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板,JPanel contentPane=new JPanel( ); /把其
4、它组件添加到Jpanel中; frame.setContentPane(contentPane); /把contentPane对象设置成为frame的内容面板 或者: frame.getContentPane.add(contentPane);,2) JPanel概述 面板(JPanel)是一个轻量容器组件,用法与Panel相同,用于容纳 界面元素,以便在布局管理器的设置下可容纳更多的组件,实现容器 的嵌套。,JPanel, JScrollPane, JSplitPane, JInteralFrame都属于常用的中间容器,是轻量组件。JPanel的缺省布局管理器是FlowLayout。,2)
5、JPanel概述 构造方法:,public JPanel():创建一个FlowLayout布局的面板 public JPanel(LayoutManger layout):创建一个指定布局的面板,如:JPanel p1=new JPanel(new BorderLayout(); 说明:面板的默认布局是FlowLayout,不同于Container的默认。,3)标签(JLabel),构造方法 JLabel() 创建一个空标签 JLabel(String c) 指定标签文本 JLabel(String c,Icon ,Imageicon icon,JLabel.left/JLabel.right
6、) 同时显示图标与文本 常用设置方法 设置标签显示文本:public void setText(String c) 取得标签显示文本:public String getText() 字体设置:public void setFont(Font f) 前景色设置: public void setForeground(Color c),按钮是窗口程序中最常用的一种组件,按钮提供用户快速启动某一 动作的方法,用户只需做的就是单击它们。按钮由Button类创建,而 Button类是由Component类直接扩展的。 按钮是一个常用组件,按钮可以带标签或图象,用户可通过按钮发 布命令。,4)按钮(JBut
7、ton),构造方法:,JButton() JButton(Icon icon) /按钮上显示图标 JButton(String text) /按钮上显示字符 JButton(String text, Icon icon) /按钮上既显示图标又显示字符,5)单行文本框(JTextField),文本框是AWT的基本组件,文本框是用来在窗口中显示文字的矩形框,这些文字可以被用户编辑。文本框可以用来输入文字、编辑文字、并显示所输入的文字、读取用户输入的文字。文本框分为单行文本框和多行文本框。,构造方法:,JTextField(); /创建一个无任何内容的文本框对象 JTextField(int col
8、umns); /指定宽度 JTextField(String text); /指定初始化文本 JTextField(String text, int columns); /即指定宽度又指定文字信息,常用方法:,设置标签显示文本:public void setText(String c) 取得标签显示文本:public String getText() 字体设置:public void setFont(Font f) 前景色设置: public void setForeground(Color c),6)密码文本框(JPasswordField),密码输入框则只有一种 (JPasswordFie
9、ld)。JPasswordField 是 JTextField 的子类,它们的主要区别是 JPasswordField 不会显示 出用户输入的东西,而只会显示出程序员设定的一个固定字符,比如 * 或者 #。,构造方法,JPasswordField() ; JPasswordField(Document doc, String txt, int columns) JPasswordField(int columns) JPasswordField(String text) JPasswordField(String text, int columns),其它方法,chargetPassword(
10、) chargetEchoChar() voidsetEchoChar(charc) 设置为了隐藏密码而显示的字符,默认为 * 字符也用 getText 方法和 setText 获得或者设置文本内容 (当然在用户界面上是隐藏的) 。,显示多行文本。 构造方法: JTextArea() JTextArea(int rows,columns) 指定尺寸 JTextArea(String text) 指定初始化文本 JTextArea(String text,int rows, int columns),7)多行文本框(JTextArea),常用设置方法: public void setLineWr
11、ap(boolean wrap):换行状态设置 public void setRows(int rows) :设置行数 public void setColumns(int columns):设置列数 说明:颜色、字体、内容的设置同上(setForeground、setFont、 setText),JComboBox每次只能选择其中的一项,但是可编辑每项的内容,而且每项的内容可以是任意类,而不再局限于String。,(8)组合框(JComboBox),作用 以下拉列表的方式给出若干选项,提供用户从中选择。 下拉列表在单击箭头时才能浏览其中的项目。,构造方法 JComboBox():创建一个默认
12、数据项的组合框。 JComboBox(Object items):创建一个包含指定数组各元素的组合框。,常用方法 Object getSelectedItem():返回当前选择项 int getSelectedIndex():返回当前选择项的序数(从0开始) int getItemCount():返回组合框中的项数。,适用于数量较多的选项以列表形式显示,里面的项目可以由任意类型对象构成。支持单选和多选。,9)列表(JList),作用 以多行列表的方式给出若干选项,提供用户从中选择。,构造方法: JList():创建一个内容为空的列表框。 JList(Object items):创建一个包含指定
13、数组各元素的列表框。,常用方法确定列表框尺寸: void setVisibleRowCount(int num):设置列表可见行数。 void setFixedCellWidth(int width):设置列表框的固定宽度(像素)。 void setFixedCellHeight(int height):设置列表框的固定高度。,其它方法 Boolean isSelectedIndex(int index):序数为index的项是否被选中。,复选框提供简单的on/off开关,旁边显示文本标签。,10)复选框(JCheckBox),作用 给出若干选项,提供用户选择。 复选框有两种状态:选中和未选中
14、。在一组复选框中,同时可以选择多项。,构造方法 JCheckBox() 无选项文本、无选中 JCheckBox(String text) 指定选项文本、无选中 JCheckBox(String text,boolean select),常用方法 isSelected():可测得复选框是否被选中。,单选框JRadioButton与AWT中的复选框组功能类似。,11)单选框(JRadioButton),作用 给出若干选项,提供用户选择其中一项。 单选按钮同复选框一样也有两种状态:选中和未选中。 多个单选按钮通常组织在一个按钮组中工作,此时只能选择其中一项。,构造方法 JRadioButton()
15、无文本、无选中 JRadioButton(String text) 指定选项文本、无选中 JRadioButton(String text, boolean selected) 指定选项文本,已选中,常用方法 isSelected():可测得单选按钮是否被选中,=TestTextField.java= import java.awt.*; import javax.swing.*; public class TestTextField extends JFrame public static void main(String args) JFrame f=new JFrame(Java程序设计
16、基础); Container c=f.getContentPane(); JPanel p=new JPanel(); c.add(p); ImageIcon icon=new ImageIcon(imageQ1.gif); /创建一个即有文字信息又有图像的标签对象,且图像位置设置在左边显示 JLabel l=new JLabel(JLabel举例,icon,JLabel.LEFT); /实例化两个文件标签 JLabel l1=new JLabel(用户名);,例6:请在窗体中添加一个标题标签,一个“用户名”标签,一个 “密码”标签,两个单行文本框,长度各为10。,JLabel l2=new
17、JLabel(密 码); /实例化两个宽度均为10的JTextField对象 JTextField tf1=new JTextField(10); JTextField tf2=new JTextField(10); p.add(l); p.add(l1); p.add(tf1); p.add(l2); p.add(tf2); f.setSize(100,200); f.setVisible(true); ,输出结果:,结果 聊天室客户端要用的控件如下:,2、确定聊天室客户端界面的布局方式 预备知识 Java通过布局管理器确定容器中各组件的大小和位置,布局管理器是执行布局管理的特殊的类。Jav
18、a 提供布局管理器类有:FlowLayout, GridLayout, BorderLayout, CardLayout,及 GridBagLayout等。 布局管理器类是从Object 类扩展过来的,并且由java.awt 包提供。,FlowLayout(流布局) FlowLayout会将组件按照从左到右,从上到下的方式排列,按 加入(add()方法)到容器的顺序布局控件。同时,组件的排列随容器 大小的变化而变化,但组件大小保持不变。,构造函数: FlowLayout():/组件位置中心对齐,组件间距为5像素。 FlowLayout(int align):/以指定方式对齐,组件间距为5像素。
19、 FlowLayout(FlowLayout.RIGHT,20,40);,GridLayout的规则相当简单,允许用户以行和列指定布局方式,每 个单元格的尺寸决定于单元格(主要取决于行数)的数量和容器的大小 ,组件大小一致。,GridLayout(网格布局),构造函数: GridLayout() GridLayout(int rows,int cols) GridLayout(int rows,int cols,int hgap,int vgap) 其中参数的含义为: rows 行,代表任意数量的行 cols 列,代表任意数量的列 hgap 组件间水平方向上的空白空间 vgap 组件间垂直方向
20、上的空白空间,BorderLayout将整个容器的布局划分成东(EAST)、西(WEST)、 南(SOUTH)、北(NORTH)、中(CENTER)五个区域,组件只能被添加 到指定的区域。如不指定组件的加入部位,则默认加到CENTER区。每 个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖。,BorderLayout(边界布局),CardLayout(卡片布局) 构造函数为: CardLayout() CardLayout(int hgap,int vgap) 其中:hgap和vgap分别为卡片间水平和垂直方向上的空白空间。,常用的方法有: public void first(Cont
21、ainer parent) /移到指定容器的第一个卡片 public void next(Container parent) /移到指定容器的下一个卡片 public void previous(Container parent) /移到指定容器的前一个卡片 public void last(Container parent) /移到指定容器的最后一个卡片 public void show(Container parent,String name) /显示指定卡片,import java.awt.*; import javax.swing.*; public class ButtonGrid
22、public static void main(String args) JFrame f = new JFrame(GridLayout); f.setLayout(new GridLayout(3,2); /容器平均分成3行2列共6格 f.getContentPane().add(new Button(1); /添加到第一行的第一格 f.getContentPane().add(new Button(2); /添加到第一行的下一格 f.getContentPane().add(new Button(3); /添加到第二行的第一格 f.getContentPane().add(new But
23、ton(4); /添加到第二行的下一格 f.getContentPane().add(new Button(5); /添加到第三行的第一格 f.getContentPane().add(new Button(6); /添加到第三行的下一格 f.setSize(200,200); f.setVisible(true); ,网络布局示例:,运行结果:,2、确定聊天室客户端界面的布局方式 结果 根据聊天室的各个组件的分布情况,聊天室应采用BorderLayout(边界布局)方式,3、确定每个控件的大小 结果,4、确定窗口的大小和位置,setSize()方法 利用JFrame的setSize()方法可
24、以设置窗口的大小。 设置窗口的大小为宽400像素,高300像素,代码如下: setSize(400,300);,setLocation()方法 利用JFrame的setLocation()方法可以设置窗口的位置。 将窗口的位置设置为屏幕中央,代码如下: /利用Toolkit工具箱得到屏幕的大小 Toolkit kit = Toolkit.getDefaultToolkit(); Dimension dime = kit.getScreenSize(); /设置窗口位置 setLocation(dime.width- 400)/ 2 , (dime.height- 300 )/ 2 );,5、创
25、建窗口 setVisible()方法 使用JFrame的setVisible(true)方法将窗口显示出来。,add()方法 利用容器组件的add方法可以将组件添加到容器中去。 本程序通过下面几步将所有组件添加到容器JFrame中。 a) 生成上,下两个JPanel面板 jp_south = new JPanel(); jp_north = new JPanel();,6、将控件加入到窗口中,b) 在面板jp_south中放置添加了图片的标签组件 jl = new JLabel(); Icon sentIcon2 = new ImageIcon(imagetitle.gif); jl.setI
26、con(sentIcon2); jp_north.add(jl); c) 在面板jp_north中放置文本框和按钮组件 jp_south.add(jtf_message); jp_south.add(jb_send); d) 将上面JPanel面板和文本域组件放置在JFrame窗口容器中 getContentPane().add(North,jp_north); getContentPane().add(Center,jta_message); getContentPane().add(South,jp_south);,4.3.3、代码实现:,Client.java package org.j
27、avaprogram.client; import java.awt.* import javax.swing.* public class Client extends JFrame private JTextField jtf_message = null; /声明文本框,用于输入消息 private JTextArea jta_message = null; /声明文本区域,用于显示聊天信息 private JButton jb_send = null;/声明发送按钮 private JPanel jp_south = null; /声明面板,用于放置文本框和发送按钮 private J
28、Panel jp_north = null; /声明面板,用于放置聊天室的Logo private JLabel jl = null;/声明标签,用于放置Logo图片,public Client()/构造方法 jtf_message = new JTextField(28);/实例化文本框 jta_message = new JTextArea();/实例化文本区域 jb_send = new JButton(发送);/实例化发送按钮 jp_south = new JPanel();/实例化两个面板 jp_north = new JPanel(); jp_south.setBackground(new Color(169,212,255); /给面板设置颜色 jl = new JLabel();/实例化标签 Icon sentIcon2 = new ImageIcon(imagetitle.gif); /声明Icon对象 jl.setIcon(sentIcon2); /在标签对象中放置图片,jp_north.add(jl);/将Logo放置到面板(上面)上 j
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026欧盟新电池法案下绝缘测试标准变更带来的检测设备增量市场预测报告
- 2026智能穿戴融合趋势下舒绒棉基材导电改性技术可行性研报
- 2026存量注塑机控制系统智能化改造的ROI模型修正与实证分析研报
- 2026NEC显示器项目商业计划书之MicroLED量产良率与成本拐点深度研究报告
- 2026天津卫生系统招聘考试(中西医结合护理)历年参考题库含答案详解
- 2026吉林省住院医师规范化培训结业理论考核(内科)历年参考题库含答案详解
- 2026吉林公务员考试(街道工作常识)历年参考题库含答案详解
- 2026卫生专业技术资格考试(麻醉学-专业实践能力·主治医师)历年参考题库含答案详解
- 2026医疗器械技术人员招聘考试(申论)历年参考题库含答案详解
- 2026医学检验期末复习-临床微生物学与检验(专医学检验)历年题库含答案详解
- 2026年技能人才评价外部质量督导员考试试卷及答案
- 2026北京市公安局监所管理总队招聘勤务辅警300人考试参考试题及答案解析
- 深度解析(2026)《SYT 7813-2024 天然气取样系统性能评价》
- 供应商廉洁培训
- 机修钳工知识培训课件
- 数学试卷山东省菏泽市B类高中2025-2026学年度高三第一学期期中考试(11.19-11.21)
- TCCS 21 2024 越南EVN22kV和35kV模块式环网柜
- 特种设备安全员守则(2025版)
- 米厂加工建筑施工方案
- 钢结构梁制作工艺流程说明
- 宗教事务条例解读课件
评论
0/150
提交评论