关于SWT中的Label类和Text类
Label类的继承关系图
Label是SWT中最简单的界面组件,给出他的一个实例如下:
public class Label1 {
public static void main(String[] args) {
Display display = Display.getDefault();
Shell shell = new Shell();
shell.setSize(450, 300);
shell.setText("SWT Application"); Label lblNewLabel = new Label(shell, SWT.NONE);
lblNewLabel.setBounds(98, 108, 61, 17);
lblNewLabel.setText("New Label"); shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}
一个Text实例:
创建一个文本框,它有如下功能:
1.只能输入数字
2.至少要输入一个值
3.长度不能多于10个字符
这些要求在实际项目中是很常见的.它的实现代码如下:
public class Text2 {
public static void main(String[] args) {
Display display = Display.getDefault();
final Shell shell = new Shell();//如果这个地方不用final修饰,下面匿名内部类中取这个shell取不到.
shell.setSize(450, 300);
shell.setText("SWT Application");
//------------------------新插入界面的核心代码---------------------
final Text text = new Text(shell, SWT.BORDER);//定义一个文本框
text.setBounds(85, 80, 182, 25);//定义文本框的定位
//以上这两句可以自动生成,但是第一句的final关键字是要自己写上的. text.setTextLimit(10);//最多只能输入10个字符
//检验监听器,没键入一个字符前都会触发
text.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
//检查输入的字符(e.text)是否在0123456789这个字符串中,不在在indexOf()会返回-1
boolean b = ("0123456789".indexOf(e.text)>=0);
e.doit = b;//doit属性如果为true,则字符允许输入,反之不允许.
}
});
//关于doit的解释 A flag indicating whether the operation should be allowed. Setting this field tofalse
will cancel the operation.
final Button button = new Button(shell,SWT.NONE);//定义一个"确定"按钮
button.setBounds(85, 118, 100, 25); // 设置按钮位置
button.setText("确定");
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e){//按钮的单击事件
//如果文本框中没有输入,则出一个警告窗,否则出一个信息提示窗
String str = text.getText();
if(str == null || str.equals("")){
MessageDialog.openWarning(shell, "", "请输入一个字符");
}else{
MessageDialog.openWarning(shell, "", "输入值通过验证");
}
}
});
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}
运行结果:
注意到这次MessageDialog的第一参数用了shell做参数,而不像以前一样用了null,
两种不同的参数的区别在哪里呢?用shell时,则弹出提示框窗口时,Windows的任务栏新增一个任务项,用null时,则Windows的任务栏会多出一个任务项.(我改成null运行之后没有发现区别.........有待考证.)
SWT.NONE
Text类的样式表:
SWT.CENTER(居中)
SWT.LEFT(靠左)
SWT.RIGHT(靠右)
SWT.MULTI(可以输入多行,要回车)
SWT.WRAP(无须回车,到行尾后自动换行)
SWT.PASSWORD(密码类型)
SWT.READ_ONLY(只读),但是setText方法仍然可以没值
外观形状
SWT.BORDER(深陷型)
SWT.V_SCROLL(带垂直滚动条)
SWT.H_SCROLL(带水平滚动条)
常用方法
1.setEchoChar(char echo)
说明:将输入的字符显示成参数echo表示的字符
例子:text.setEchoChar("*")相当于SWT.PASSWORD的式样
2.setTabs(int tabs)
说明:按Tab键时前进多少个空格的长度,默认值为8个,只有当Text的式样为
SWT.MULTI, SWT.V_SCROLL,SWT.H_SCROLL时,此设置才会有效.
例子:setTab(4),按Tab键时前进4个空格的长度
3.setTopIndex(int index)
说明:转到文本框的第index行,0为第一行,此命令可以再文本框中进行快速定位.
例子:text.setTopIndex(0),将当前行定位到首行上.
4.setTextLimit(int limit)
说明:设置最多只能输入limit个字符.
例子:setTextLimit(10),文本框最多只能输入10个字符.
Text1.java
public class Text1 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
Text text = new Text(shell, SWT.BORDER);
text.setBounds(18, 20, 153, 25); // 文本框的定位
text.setTextLimit(10); // 限制最多只能输入10个字符
// 检验监听器,每一次按键都会触发
text.addVerifyListener(new VerifyListener() {
public void verifyText(VerifyEvent e) {
String inStr = e.text;// 当前输入字符,注意:该值和text.getText()不是同一个值
System.out.println(inStr); // 打印出来看看
if (inStr.length() > 0) { // 按退格键时inStr="",长度为0
// doit属性如果为true,则字符允许显示到文框,反之不允许。
e.doit = NumberUtils.isDigits(inStr); // 判断inStr是否为整数
}
}
});
// -----------------END------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
Text1.java中用到的NumberUtils是Apache common-lang包中的一个工具方法,Apache Commons是一个很有用的工具集,很多以前自己写的工具方法都可以在这个工具集中找到,它能帮助我们节省大量代码,可惜国内除了一本英文影印版外就没有更多的书籍介绍它了,如果想要了解更多的Apache Commons的更多信息,可以到它的官网上去找.
getText()不可能返回null,如果文本框没有填写字符,则返回的是空字符串"".
setText(String string)的参数不能为null,否则会报错,在这里不注意就很容易出BUG.如果不敢确定,最好在传入此参数前做一个空值判断.
Text2.java
public class Text2 {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
// ---------创建窗口中的其他界面组件-------------
Text text = new Text(shell, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
text.setBounds(10, 10, 230, 100);
text.setText("大海\n天空");// \n是换行符
// -----------------END------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
Text类的式样列表:
常用方法:
setEchoChar(char echo)
说明:将输入的字符显示成参数echo表示的字符.
例子:text.setEchoChar('*'),相当于SWT.PASSWORD式样.
setTabs(int tabs)
说明:设置按Tab键时前进多少个空格的长度,默认值为8个.只有当Text的式样为SWT.MULTI,SWT.V_SCROLL,SWT.H_SCROLL时,此设置才会有效.
例子:setTab(4),按Tab键时候前进4个空格的长度.
setTopIndex(int index)
说明:转到文本框的第index行,0为第一行.此命令可以进行快速行定位.
例子:text.setTopIndex(0),将当前行定位到首行上.
setTextLimit(int limit)
说明:设置最多只能输入limit个字符.
例子:setTextLimit(10),文本框最多只能输入10个字符.
copy(),paste(),cut()
说明:这是文本框的3个编辑方法,复制,粘贴,剪切.复制和剪切要先选择好文本框中的字符.
关于SWT中的Label类和Text类的更多相关文章
- hadoop中Text类 与 java中String类的区别
hadoop 中 的Text类与java中的String类感觉上用法是相似的,但两者在编码格式和访问方式上还是有些差别的,要说明这个问题,首先得了解几个概念: 字符集: 是一个系统支持的所有抽象字符的 ...
- 关于SWT中的表格(TableViewer类)
JFace是SWT的扩展.它提供了一组功能强大的界面组件.其中包含表格,树,列表.对话框,向导对话框等. 表格是一种在软件系统中很常用的数据表现形式.特别是基于数据库的应用系统.表格更是不可缺少的界面 ...
- SWT中各种参数大全
1按钮组件(Button) (1)Button组件常用样式 SWT.PUSH按钮 SWT.CHECK多选按钮 SWT.RADIO单选按钮 SWT.ARROW箭头按钮 SWT.NONE默认按钮 SWT. ...
- 关于MapReduce中自定义带比较key类、比较器类(二)——初学者从源码查看其原理
Job类 /** * Define the comparator that controls * how the keys are sorted before they * are pa ...
- C#中 StringBuilder类 与 String类的区别---(转)
在找工作的时候,去了些公司,避免不了要面试和笔试.不过一般最起初的是笔试.我印象中有这样有一道题目:StringBuilder类与 String类的区别?那时候我不太清楚这两个类的区别,今天在看代 ...
- C中如何调用C++函数、类内函数 \混编\链接
在C中如何调用C++函数的问题,简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂 ...
- Eclipse中的TreeViewer类和ListViewer类
TreeViewer和TableViewer在使用上还是有很多相似之处.TreeViewer中冶有TableViewer中的过滤器和排序器.具体使用看TableViewer中的使用. 和Table有J ...
- 1.一个.java源文件中是否可以包括多个类?2...
1.一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制? 答:可以有多个类,但只能有一个public类,并且public的类名必须与文件名相一致. 2.java有没有goto? 答 ...
- android中与SQLite数据库相关的类
为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...
随机推荐
- js基础第3天
仿淘宝搜索框案例(有价值) 判断用户输入事件 正常浏览器:oninput(判断用户输入) ie678浏览器兼容:onpropertychange(因为兼容性问题, ie浏览器678是需要使用这个来判断 ...
- log4net使用的一点心得
关于使用log4net的文章很多,把自己在使用中查到的文章列一下. log4net 可以存在很多地方 比如console,数据库.邮箱.文本等等.我要实现的是 所有的日志都记录到html文件中,可以按 ...
- 用JDK自带的工具生成客户端调用Webservice的代码
JAVA下客户端调用Webservice代码简直是让人心生畏惧,今日尝试,做记录如下,参考网上的众多解决方案,下面这种方式是比较简单的. 在jdk的bin目录下有一个wsimport.exe的工具,使 ...
- getsockopt/setsockopt 函数说明
[ getsockopt/setsockopt系统调用] 功能描述: 获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选 ...
- 1.2CPU和GPU的设计区别
CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景.CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理.这些都使得C ...
- 题解西电OJ (Problem 1004 -亚特兰提斯)--最小生成树
Description 为了找寻沉睡的亚特兰提斯大陆,wm来到了大西洋上进行探险,找了半个月仍一无所获.然而在一次突袭而来的暴风雨后,wm的船莫名地驶入了一片未知的区域,发现了一个地图上未标记的岛屿, ...
- stm32f10x.h文件分析理解
今天再看过半年前自己写的这篇发现自己当时理解有误,stm32f10x.h与库开发并未存在太大关系,只是一个最为重要的寄存器地址到寄存器结构体变量的映射. stm32f10x.h 这个头文件是STM32 ...
- .NET解析HTML库集合
CsQuery AngleSharp Jumony HtmlAgilityPack Fizzler ScrapySharp NSoup
- Volley使用指南第一回(来自developer.android)
最近闲来想看看android网络方面的东西.google在2013年发布了一个叫做Volley的网络请求框架,我看了一下官网,居然在training里面就有教程.首先,英文的东西看着 还是挺不爽的,特 ...
- ASP.NET购物车实现方法
1.可以参考PetShop中的购物车实现方法 2.[经典示例分享]— 商城购物车设计(VS+Access)附源码 http://www.cnblogs.com/wenyang-rio/archive/ ...