• 关于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("大海
    天空");// 
    是换行符
    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个编辑方法,复制,粘贴,剪切.复制和剪切要先选择好文本框中的字符.

  • 相关阅读:
    03 在百度地图上定位到指定位置
    01 如何将百度地图加入IOS应用程序?
    三个字理解委托机制
    iOS 应用程序打包、真机调试 方法
    在读iOS官方文档时,里面有很多你不懂的单词,不要担心
    用“大控件”与“大数据类型”思想来理解view Cotroller
    04 将当前位置用大头针标注到百度地图上
    02 使用百度地图获得当前位置的经纬度
    专注分享思考过程
    像孙正义为了练英语坚决不说日语一样。我也应该有坚决不看中文文档的心!
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/4161572.html
Copyright © 2020-2023  润新知