动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.JBuilder2005创建开发文档之Java.
.JBuilder5+Weblogic 6.0安装配置.
.java.applet.Applet的 .
.用JAVA对彩色图片进行灰度变换.
.从Hibernate2到3移植的两点初体验.
.在J2EE组件中引用和查找Web服务.
.学习日期、日期格式、日期的解析.
.用J2SE1.4进行Internet安全编程.
.用 Jython 构建 JUnit 测试包.
.JSF ( JavaServer Faces ) 介绍.
.学习JAVA的笔记(一).
.Eclipse In Action1.3.
.Resin的使用和安装(1).
.在 Java 应用程序中创建图像.
.Struts源码研究-Action-Input属性.
.在基于MIDP的应用程序上使用JDBC.
.架构设计师(Architect)的专业与角.
.免费的开源应用服务器JBoss基础知.
.Tomcat新手攻略.
.Java的特点.

Java 图形用户界面设计(下)

发表日期:2008-1-5 |



  四. 文本输入框、密码输入框
  文本输入框包括两种,单行文本输入框 (JTextField) 和多行文本输入框 (JTextArea)。密码输入框则只有一种 (JPassWordField)。JPasswordField 是 JTextField 的子类,它们的主要区别是 JPasswordField 不会显示出用户输入的东西,而只会显示出程序员设定的一个固定字符,比如 '*'。
  下面的示例图和代码是 JTextField、JPasswordField 和 JTextArea 的示例:
   Java 图形用户界面设计(下)(图一)


  /**
  * TestTexts.Java
  * @author Fancy
  */
  import javax.swing.*;
  import javax.swing.event.*;
  public class TestTexts extends JFrame {
  private JLabel label = new JLabel("Status");
  private JTextField textField;
  private JPasswordField pwdField;
  private JTextArea textArea;
  public TestTexts() {
  super("Test Texts");
  setDefaultCloseOperation(EXIT_ON_CLOSE);
  getContentPane().setLayout(new java.awt.FlowLayout());
  textField = new JTextField(15);
  /* 监听文本光标移动事件 */
  textField.addCaretListener(new CaretListener() {
  public void caretUpdate(CaretEvent e) {
  // 假如改变了内容,就可以即时更新 label 显示的内容
  label.setText(textField.getText());
  }
  });
  pwdField = new JPasswordField(15);
  pwdField.setEchoChar('#');
  textArea = new JTextArea(5, 15);
  textArea.setLineWrap(true);
  getContentPane().add(textField);
  getContentPane().add(pwdField);
  getContentPane().add(textArea);
  getContentPane().add(label);
  setSize(200, 200);
  }
  public static
  void main(String[] args) {
  TestTexts tt = new TestTexts();
  tt.show();
  }
  }
  上例中,我们构造了一个宽度为 15 个字符的单行文本框 (textField = new JTextField(15);),并使用 addCaretListener 方法添加了一个 CaretListener (textField.addCaretListener ...)。CaretListener 监听文本光标的移动事件。当用户使用键盘、鼠标等移动了文本光标在 JTextField 中的位置时触发这个事件。我们需要重载 caretUpdate(CaretEvent e) 对事件进行处理 (public void caretUpdate(CaretEvent e) ...)。这样,我们可以在这里做类似 VB 中 TextBox 的 OnChange 事件中做的事情。
  JTextField 有 5 个构造方法,常用其中的四个:
  JTextField()
  JTextField(int columns),如上例 textField = new JTextField(15);
  JTextField(String text)
  JTextField(String text, int columns)
  其中,参数 text 是单行文本框的初始内容,而 columns 指定了单行文本框的宽度,以字符为单位。JTextField 中的文本内容可以用 getText() 方法获得。也可以用 setText 方法指定 JTextField 中的文本内容。
  JPasswordField 是 JTextField 的子类,其构造方法也是类似的。JPasswordField 提供了 setEchoChar(char ch) 方法设置为了隐藏密码而显示的字符,默认为 '*' 字符,上例中则设置为了 '#' 字符 (pwdField.setEchoChar('#');)。与 JTextField 一样,JPasswordField 也用 getText 方法和 setText 获得或者设置文本内容 (当然在用户界面上是隐藏的)。
  JTextField 是单行文本框,不能显示多行文本,假如想要显示多行文本,就只好使用多行文本框 JTextArea 了。JTextArea 有六个构造方法,常用的也是四个:
  JTextArea()
  JTextArea(int rows, int columns)
  JTextArea(String text)
  JTextArea(String text, int rows, int columns) 
  text 为 JTextArea 的初始化文本内容;rows 为 JTextArea 的高度,以行为单位;columns 为 JTextArea 的宽度,以字符为单位。如上例中就构造了一个高 5 行,宽 15 个字符的多行文本框 (textArea = new JTextArea(5, 15);)。
  多行文本框默认是不会自动折行的 (不过可以输入回车符换行),我们可以使用 JTextArea 的 setLineWrap 方法设置是否答应自动折行。setLineWrap(true) 是答应自动折行,setLineWrap(false) 则是不答应自动折行。多行文本框会根据用户输入的内容自动扩展大小,不信,自己做个实验——假如不自动折行,那么多行文本框的宽度由最长的一行文字确定的;假如行数据超过了预设的行数,则多行文本框会扩展自身的高度去适应。换句话说,多行文本框不会自动产生滚动条。怎么办?后面讲到滚动窗格 (JScrollPane) 的时候,你就知道了。
  多行文本框里文本内容的获得和设置,同样可以使用 getText 和 setText 两个方法来完成。
  五. 窗格、滚动窗格和布局治理
  窗格 (JPanel) 和滚动窗格 (JScrollPane) 在图形用户界面设计中大量用于各种组件在窗口上的布置和安排。这里所谓的布置和安排,就是布局 (Layout),因此不得不先说说布局。
  将加入到容器(通常为窗口等) 的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。布局由布局治理器 (Layout Manager) 来治理。那么,我们在什么时候应该使用布局治理器?应用选择哪种布局治理器?又该怎样使用布局治理器呢?
  往往,我们设计一个窗口,其中是要添加若干组件的。为了治理好这些治理的布局,我们就要使用布局治理器。比如说,设计一个简单的编辑器,这个编辑器中只需要放置两个按钮和一个多行文本框。这些组件是让 Java 自己任意安排呢?还是按照一定的位置关系较规范的安排呢?当然应该选择后者。那么,为了按照一定的位置关系安排这些组件,我们就需要用到布局治理器了。
  然后我们碰到了一个选择题——使用哪种布局治理器。为此,我们首先要知道有些什么布局治理器,它们的布局特点是什么。常用的布局治理器有: FlowLayout、BorderLayout、GridLayout、BoxLayout 等,其中 FlowLayout 和 BorderLayout 最常用,本文主要也就只谈谈这两种布局治理器。下面列表说明它们的布局特点:
   Java 图形用户界面设计(下)(图二)
  就上述的编辑器为例,假如选用 FlowLayout,那么两个按钮和一个多行文本框就会排列在一行——当然这是窗口足够宽的情况;假如窗口稍窄一些,则可能分两行排列,第一行有两个按钮,而第二行是多行文本框——这是最理想的情况;假如窗口再窄一些,就可能分三行排列,第一行和第二行分别放置一个按钮,第三行放置多行文本框。因此,假如窗口大小可以改变,那么三个组件的位置关系也可能随着窗口大小的变化而变化。所以,FlowLayout 不适用。其实上面所举的例程中,大部分都是用的 FlowLayout,那是因为我们没有要求组件的布局。
  假如选用 BorderLayout 的情况又如何呢?我们可以试着加入一个窗格 (JPanel,稍后讲解),并将两个按钮放置在其中,然后将这个窗格加入到 BorderLayout 的北部 (即上部);再将多行文本框加入到 BorderLayout 中部。结果类似使用 FlowLayout 的第二种可能,是最理想的情况。而且,假如改变窗口大小,它们的位置关系仍然是北-中的关系,不会随之改变。
  剩下的两种布局治理器,加以窗格 (JPanel) 的配合,也能够很好的安排上述编辑器所需的三个组件。但是由于它们的使用稍为复杂一些,所以就不讲了。下面就讲讲如何使用 FlowLayout 和 BorderLayout。
  任何布局治理器,都需要用在容器上,比如 JFrame 的 Content Pane 和下面要说的 JPanel 都是容器。容器组件提供了一个 setLayout 方法,就是用来改变其布局治理器的。默认情况下,JFrame 的 Content Pane 使用的是 BorderLayout,而 JPanel 使用的是 FlowLayout。但不管怎样,我们都可以调用它们的 setLayout 方法来改变其布局治理器。比如上述的编辑器中,我们要让窗口 (JFrame 对象,假设为 frame) 使用 BorderLayout,就可以使用 frame.getContentPane().setLayout(new BorderLayout()); 来改变其布局治理器为一个新的 BorderLayout 对象。
  然后,我们对布局治理器的直接操作就结束了,剩下的只需要往容器里添加组件。假如使用 FlowLayout,我们只需要使用容器的 add(Component c) 方法添加组件就行了。但是,假如使用 BorderLayout 就不一样了,因为要指定是把组件添加到哪个区域啊。那我们就使用容器的 add(Component c, Object o) 方法添加组件,该方法的第二个参数就是指明添加到的区域用的。例如,上述编辑器中要添加一个多行文本框到 BorderLayout 的中部,就可以用 frame.getContentPane().add(new JTextArea(5, 15), BorderLayout.CENTER) 来实现。
  BorderLayout 的五个区域分别是用下列五个常量来描述的:
  BorderLayout.EAST 东
  BorderLayout.SOUTH 南
  BorderLayout.WEST 西
  BorderLayout.NORTH 北
  BorderLayout.CENTER 中
  刚才已经提到了使用 JPanel。JPanel 作为一个容器,可以包容一些组件,然后将这个 JPanel 对象作为一个组件添加到另一个容器 (称作父容器) 中。这个功能有什么好处呢?
  上面不是提到 BorderLayout 的一个区域中只能添加一个组件吗?但是我们的编辑器需要添加两个按钮到它的北部,怎么办?上面的例子中,我们就是用的一个 JPanel 包容了这两个按钮,然后再将这个 JPanel 对象作为一个组件添加到设置布局治理器为 BorderLayout 的 Content Pane 中。
  上面说到各布局治理器的布局特点的时候,几乎每一种都是一个区域只能添加一个组件,那我们想添加多个组件到一个区域的时候,就要用到 JPanel 了。假如还没有明白,稍后看一段程序可能更易于理解。
上一篇:Java 图形用户界面设计(上) 人气:844
下一篇:Jboss中Myfaces与Sitemesh的集成 人气:613
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-10 老Y文章管理系统 v2.2 bulid 081
2008-10-10 魔法盒动感相册 ASP+SQL版 v2.0
2008-10-10 Asoft签到管理系统 v3.0 Pack1
2008-10-10 哥特人音乐网潮流留言本 v1.1
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成