`
djob2008
  • 浏览: 130431 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

转载:SWT初学者易困惑的几个问题

阅读更多

 

   作为我的开博之作,我选择了写这样的一个题目,完全是因为我对Java技术的爱好。在Java这个技术领域,涉及的东西颇多,我也都有一点点的研究,现在主攻方向是J2EE,之所以写这些关于SWT的东东也并不能说明我在这方面就是一个高手,事实上,我也是一个初学者,而我的目的呢,也只是希望通过博客和大家共享交流。

废话说多了 ^_^ 现在进入正题:

什么是SWT?如果有兴趣了解这门技术的朋友,可以参照下面的资料:

http://www.ntsky.com/tech/java/j2se/advancedjava/2008-05-29/4fc1e1a5c979c36a.html?Java%E9%AB%98%E7%BA%A7-java  SWT:Swing和AWT的强力竞争者

http://www.eclipseworld.org/bbs/read-cec-tid-172.html  SWT/jFace开发入门指南-中国Eclipse社区。

    在写下面的内容之前,笔者假定读者朋友是对SWT这项技术有了基本的了解

    1.在shell中禁用最大化按钮

    我在尝试写SWT代码的时候遇着这样的一个问题:我希望将shell的最大化按钮禁用,于是我回想原来在写AWT的时候用到的一个方法,Resizable()(貌似是这样,记不清莫怪),于是我在API文档中查找shell的相关方法,希望能够找到这样的一个方法,但是很不幸,我没有找到。后来我慢慢领悟到,其实SWT中大部分组件的表现形式都是通过他们构造方法中的style参数(所有的style都在org.eclipse.swt包中)来控制,于是我查看了API文档,在shell中找到了几个关于shell表现的style:

SWT.CLOSE   SWT.TITLE    SWT.MIN    SWT.MAX   SWT.RESIZE

如果我们希望在shell中禁用最大化按钮,只需在源码中写这样的代码:

Display display = new Display();
shell = new Shell(display,SWT.CLOSE|SWT.MIN|SWT.SYSTEM_MODAL); //创建窗体禁用最大化按钮

    2.键盘的字母监听

    前言:监听回车键之类的东东很好办,因为有现成的keyCode,比如说我们在一个文本框中监听回车键,代码如下:

text1.addKeyListener(new KeyAdapter(){    //添加按键监听器于text1上
    public void keyPressed(KeyEvent e) {    //监听键盘按键
    if(e.keyCode == SWT.CR)   //当按回车键键时触发
     text2.setText(text1.getText());}});

OK,这样就搞定.。但是如果我们监听字母A键呢,查找API文档,没有SWT.A这样的style,所以看来这样是行不通了。

但是我们可以用下面的方法解决,代码:

text1.addKeyListener(new KeyAdapter(){
   public void keyPressed(KeyEvent e) {
    if(e.keyCode == (int)(e.character = 'a')) //当按键为字母A键时触发
     text2.setText(text1.getText());}});

在上面的代码中我们使用了Event类的character,他返回一个字符型,我们只需要将它强制转化为int类型在和keyCode做比较就ok。个人认为这个方法比较复杂,但是是我目前摸索到的方法,如果其他朋友有更好的方法,希望能够提出来大家共享。
 

     3.在MessageBox中判断点击。

     MessageBox是一个消息对话框(详见API文档),他有几种style:

ICON_ERROR, ICON_INFORMATION, ICON_QUESTION, ICON_WARNING, ICON_WORKING
OK, OK | CANCEL
YES | NO, YES | NO | CANCEL
RETRY | CANCEL
ABORT | RETRY | IGNORE
我是在处理一个shell关闭的事件中遇到的问题,未改之前的代码如下:

shell.addShellListener(new ShellAdapter() {

   public void shellClosed(ShellEvent e) {
     MessageBox msgbox = new MessageBox(shell,SWT.YES|SWT.NO|SWT.ICON_QUESTION);
     msgbox.setText("退出");
     msgbox.setMessage("你确定要退出吗?");
     msgbox.open();  

  });

上面那一段代码的作用是:在点击shell的关闭按钮(即左上角的“X”时),会弹出一个对话框,为你“你确定要退出吗?”,我的本意是:在点击“是”的时候关闭窗口,不然则不关闭窗口。但是很不幸,无论我是点击“是”还是“否”,窗口都会义无反顾的消失。所以从这里我们可以看出,我们需要做一个判断,那么怎么判断呢,仔细思考我们可以发现,msgbox.open()返回的是一个int值,而我们的style便就是int值,好了,方法在瞬间找到了,我们只需要在open的时候判断到底是SWT.YES还是SWT.NO就可以确定我们点击为“是”或者“否”,重写代码如下:

shell.addShellListener(new ShellAdapter() {

  public void shellClosed(ShellEvent e) {
    MessageBox msgbox = new MessageBox(shell,SWT.YES|SWT.NO|SWT.ICON_QUESTION);
    msgbox.setText("退出");
    msgbox.setMessage("你确定要退出吗?");
    if(msgbox.open() == SWT.YES) {  //打开的时候判断值为YES
     e.doit = true;  //执行操作
    } else {
     e.doit = false;
    }
    }
  });

在上面的代码中,我判断了在打开的时候为“YES”,然后将doit值设为ture,即执行操作,否则为false。好了,问题又来了,这个doit是个什么东东呢,不要着急,下面接着讲,不过现在我们的msgbox是真的可以判断我们的意图来执行操作了。 ^_^

     4. Event中的doit

     在上面的问题中我们看到了这样的代码段:

 if(msgbox.open() == SWT.YES) {  //打开的时候判断值为YES
     e.doit = true;  //执行操作
    } else {
     e.doit = false;
    }
那么doit到底是何方神圣可以主宰我们事件的“真假”呢?这里揭开谜底,doit是Event类中的一个参数,

API中的定义:

boolean doit

API中的state:

depending on the event, a flag indicating whether the operation should be allowed.

从state中可以看出:doit依赖于event(事件),是一个指示操作是否被允许的标志。

当doit值为true时为允许,反之则不被允许。在上面的代码中,doit为true的时候,就被允许执行shellClosed的操作,所以当我们按下“是”的时候,shell被销毁了,而按下“否”的时候,shell便不会销毁。

    好了,就写到这里了,我感觉写篇博客还是蛮累的,我写出这些东西来是因为我在开始研究swt中遇到的问题让我疑惑了很久,幸运的是,通过摸索,我解决了这些在我求知路上的障碍。作为一名初学者,写这样的文章完全是出于能够帮助和我有过同样疑惑的朋友,共享交流,互相学习。

<!-- -->
分享到:
评论

相关推荐

    Java图形界面开发:SWT全接触.pdf

    为了更好地理解SWT的使用方式,下面展示一个简单的SWT程序示例: 1. **准备环境**:首先需要获取SWT的JAR文件。这些文件通常位于Eclipse安装目录下的`plugins`文件夹内。具体来说,可以在`${你的eclipse安装路径}...

    swt资源释放问题

    SWT 资源释放问题详解 SWT(Standard Widget Toolkit)是一种基于 Java 的 GUI 工具包,提供了丰富的图形用户界面组件和事件处理机制。但是, SWT 中的资源释放问题是一件棘手的事情。如果不正确地释放资源,可能...

    SuperMap Objects Java: SWT框架 快速入门

    "GettingStarted_swt"这个文件很可能是一个详细的步骤指南,涵盖了从安装SWT和SuperMap Objects Java,到创建第一个GIS应用的整个过程。它可能包括以下章节: - **环境配置**:详细说明如何设置开发环境,包括JDK、...

    纯SWT的报表库: SWT Report

    支持功能有: 1. 跨行和跨列功能 2. 页码和页数统计 3. 边距和间距调整 4. 各边框颜色设置 5. 前景和背景颜色 .........资源里包括两个包。一个是SWT Report的项目包,另一个是CustomReportTest 类生成的报表

    SWT 教程(适合初学者)

    SWT 教程 适合初学者入门使用 SWT 教程 适合初学者入门使用

    SWT实例

    在SWT实例中,我们通常会遇到以下几个关键知识点: 1. **组件(Widgets)**:SWT的核心是各种组件,如Button、Text、Label、Shell等。每个组件都代表用户界面上的一个可视元素,它们可以单独使用,也可以组合起来...

    Eclipse开发经典教程:SWT布局

    Eclipse开发经典教程,SWT中采用了布局方式,用户可使用布局来控制组件中元素的位置和大小等信息。

    swt入门范例新手适用,入门级

    这个“swt入门范例新手适用,入门级”压缩包很可能是为初学者准备的一系列示例代码,帮助他们快速掌握SWT的基本用法。 SWT作为GUI工具包,提供了丰富的组件,如按钮、文本框、列表、树视图等,用于构建用户界面。与...

    初学SWT (一)

    SWT的使用通常涉及以下几个关键知识点: 1. **控件基础**: SWT提供了一系列基本的GUI控件,如按钮(Button)、文本框(Text)、标签(Label)、列表(List)、树(Tree)等。这些控件可以直接在Java代码中创建,并通过事件...

    SWT设计.pdf.rar

    SWT(Standard Widget Toolkit)是Java编程环境中一个用于创建用户界面的开源库,它是Eclipse项目的一部分。SWT提供了一组与操作系统原生GUI控件相集成的类,使得Java应用程序能够具有与本地应用程序类似的外观和...

    IBM GUI库SWT教程

    **IBM GUI库SWT教程** SWT(Standard Widget Toolkit)是由Eclipse基金会开发的一个用于创建图形用户界面(GUI)的开源库,它为...无论你是初学者还是有经验的开发者,都可以从这个教程中受益,提升你的GUI编程技能。

    SWT API JAVA

    SWT(Standard Widget Toolkit)...这份文档不仅包含了类和方法的解释,还有示例代码,对于初学者和有经验的开发者都是宝贵的资源。通过深入学习和实践,开发者可以充分发挥SWT的潜力,创建出满足用户需求的应用程序。

    swt高级密笈源码swt

    SWT(Standard Widget Toolkit)是Eclipse开源组织提供的一款用于创建Java图形用户界面(GUI)的库,它为开发者提供了丰富的控件和功能,使得在Java中开发美观且高效的桌面应用变得可能。"SWT高级密笈源码"很可能是...

    swt工具文档 swt工具文档

    SWT(Standard Widget Toolkit)是Java编程环境中一个用于创建图形用户界面(GUI)的开源库。它是Eclipse项目的一部分,旨在提供与操作系统更紧密的集成,使得开发者可以创建原生外观的应用程序。SWT提供了丰富的...

    SWT编程开发学习资料

    在"SWT编程开发学习资料"中,你可以期待获取关于以下几个方面的深入理解和实践指导: 1. **SWT基础知识**:SWT提供了一系列控件,如按钮、文本框、列表、树、表格等,以及布局管理器,如FillLayout、GridLayout、 ...

    初学SWT&JFace

    这篇文章将引导初学者进入SWT和JFace的世界,理解这两个库的核心概念,并展示如何利用它们来构建用户界面。 SWT是Eclipse项目的一部分,它是一个基于操作系统原生控件的Java GUI库。SWT的目标是提供比Java AWT和...

    SWT.zip 图形化

    在“SWT.zip 图形化”这个主题中,我们可以深入探讨以下几个关键知识点: 1. **SWT组件**:SWT提供了各种组件,如按钮、文本框、列表、树视图、滚动条等,这些组件直接映射到操作系统提供的原生控件,因此具有更好...

    SWT源代码 SWT Source code

    在提供的压缩包文件中,我们可以看到多个源文件,这些文件主要涉及到SWT的核心实现: 1. `build-ce.bat` 和 `build.bat`:这是构建脚本,用于编译和打包SWT源代码。`build-ce.bat` 可能是为Windows CE环境设计的,...

    swt 监控代码资料

    在“swt 监控代码资料”这个主题下,我们可以探讨以下几个核心知识点: 1. SWT基本概念:SWT是一个跨平台的GUI库,它通过使用本地系统资源来提供更接近原生应用的用户体验。与Java Swing不同,SWT不使用抽象窗口...

Global site tag (gtag.js) - Google Analytics