关于SWT中的Label类和Text类
Label类的继承关系图
Label是SWT中最简单的界面组件,给出他的一个实例如下:
1 public class Label1 { 2 public static void main(String[] args) { 3 Display display = Display.getDefault(); 4 Shell shell = new Shell(); 5 shell.setSize(450, 300); 6 shell.setText("SWT Application"); 7 8 Label lblNewLabel = new Label(shell, SWT.NONE); 9 lblNewLabel.setBounds(98, 108, 61, 17); 10 lblNewLabel.setText("New Label"); 11 12 shell.open(); 13 shell.layout(); 14 while (!shell.isDisposed()) { 15 if (!display.readAndDispatch()) { 16 display.sleep(); 17 } 18 } 19 } 20 }
一个Text实例:
创建一个文本框,它有如下功能:
1.只能输入数字
2.至少要输入一个值
3.长度不能多于10个字符
这些要求在实际项目中是很常见的.它的实现代码如下:
1 public class Text2 {
2 public static void main(String[] args) {
3 Display display = Display.getDefault();
4 final Shell shell = new Shell();//如果这个地方不用final修饰,下面匿名内部类中取这个shell取不到.
5 shell.setSize(450, 300);
6 shell.setText("SWT Application");
7 //------------------------新插入界面的核心代码---------------------
8 final Text text = new Text(shell, SWT.BORDER);//定义一个文本框
9 text.setBounds(85, 80, 182, 25);//定义文本框的定位
10 //以上这两句可以自动生成,但是第一句的final关键字是要自己写上的.
11
12 text.setTextLimit(10);//最多只能输入10个字符
13 //检验监听器,没键入一个字符前都会触发
14 text.addVerifyListener(new VerifyListener() {
15 @Override
16 public void verifyText(VerifyEvent e) {
17 //检查输入的字符(e.text)是否在0123456789这个字符串中,不在在indexOf()会返回-1
18 boolean b = ("0123456789".indexOf(e.text)>=0);
19 e.doit = b;//doit属性如果为true,则字符允许输入,反之不允许.
20 }
21 });
22 //关于doit的解释 A flag indicating whether the operation should be allowed. Setting this field to false
will cancel the operation.
23 final Button button = new Button(shell,SWT.NONE);//定义一个"确定"按钮
24 button.setBounds(85, 118, 100, 25); // 设置按钮位置
25 button.setText("确定");
26 button.addSelectionListener(new SelectionAdapter() {
27 public void widgetSelected(SelectionEvent e){//按钮的单击事件
28 //如果文本框中没有输入,则出一个警告窗,否则出一个信息提示窗
29 String str = text.getText();
30 if(str == null || str.equals("")){
31 MessageDialog.openWarning(shell, "", "请输入一个字符");
32 }else{
33 MessageDialog.openWarning(shell, "", "输入值通过验证");
34 }
35 }
36 });
37 shell.open();
38 shell.layout();
39 while (!shell.isDisposed()) {
40 if (!display.readAndDispatch()) {
41 display.sleep();
42 }
43 }
44 }
45 }
运行结果:
注意到这次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
1 public class Text1 { 2 public static void main(String[] args) { 3 final Display display = Display.getDefault(); 4 final Shell shell = new Shell(); 5 shell.setSize(327, 253); 6 // ---------创建窗口中的其他界面组件------------- 7 Text text = new Text(shell, SWT.BORDER); 8 text.setBounds(18, 20, 153, 25); // 文本框的定位 9 text.setTextLimit(10); // 限制最多只能输入10个字符 10 // 检验监听器,每一次按键都会触发 11 text.addVerifyListener(new VerifyListener() { 12 public void verifyText(VerifyEvent e) { 13 String inStr = e.text;// 当前输入字符,注意:该值和text.getText()不是同一个值 14 System.out.println(inStr); // 打印出来看看 15 if (inStr.length() > 0) { // 按退格键时inStr="",长度为0 16 // doit属性如果为true,则字符允许显示到文框,反之不允许。 17 e.doit = NumberUtils.isDigits(inStr); // 判断inStr是否为整数 18 } 19 } 20 }); 21 // -----------------END------------------------ 22 shell.layout(); 23 shell.open(); 24 while (!shell.isDisposed()) { 25 if (!display.readAndDispatch()) 26 display.sleep(); 27 } 28 display.dispose(); 29 } 30 }
Text1.java中用到的NumberUtils是Apache common-lang包中的一个工具方法,Apache Commons是一个很有用的工具集,很多以前自己写的工具方法都可以在这个工具集中找到,它能帮助我们节省大量代码,可惜国内除了一本英文影印版外就没有更多的书籍介绍它了,如果想要了解更多的Apache Commons的更多信息,可以到它的官网上去找.
getText()不可能返回null,如果文本框没有填写字符,则返回的是空字符串"".
setText(String string)的参数不能为null,否则会报错,在这里不注意就很容易出BUG.如果不敢确定,最好在传入此参数前做一个空值判断.
Text2.java
1 public class Text2 { 2 public static void main(String[] args) { 3 final Display display = Display.getDefault(); 4 final Shell shell = new Shell(); 5 shell.setSize(327, 253); 6 // ---------创建窗口中的其他界面组件------------- 7 Text text = new Text(shell, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL); 8 text.setBounds(10, 10, 230, 100); 9 text.setText("大海\n天空");// \n是换行符 10 // -----------------END------------------------ 11 shell.layout(); 12 shell.open(); 13 while (!shell.isDisposed()) { 14 if (!display.readAndDispatch()) 15 display.sleep(); 16 } 17 display.dispose(); 18 } 19 }
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个编辑方法,复制,粘贴,剪切.复制和剪切要先选择好文本框中的字符.
作者:SummerChill 出处:http://www.cnblogs.com/DreamDrive/ 本博客为自己总结亦或在网上发现的技术博文的转载。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 |