SWT学习笔记!

本文详细介绍了SWT(Standard Widget Toolkit)图形API,包括其与AWT/Swing的区别,SWT/JFace的优缺点,以及在Eclipse中的应用。讲解了Eclipse的SWT/JFace如何直接调用本机窗口组件,强调了其性能优势。同时,讨论了SWT/JFace的移植性和争议。此外,还介绍了Eclipse作为多语言开发环境,以及常用插件的安装和SWT Designer这款界面开发工具的使用。最后,文章深入讲解了SWT事件处理的四种方式,并给出了常用组件如Button的使用示例,以及线程在SWT中的应用,展示了如何实现在后台处理任务并实时更新界面进度。
摘要由CSDN通过智能技术生成

SWT学习笔记!

1,SWT/JFace AWT/SWING  区别是

java的标准图形 API : AWT/SWING 一直是被后人诟病的, 用它写的页面不够完美, 页面响应速度还慢。后来出现的Eclipse SWT/JFace 图形 API  彻底改变了这一状况。主要原因是: SWT/JFace AWT/SWING  在实现上有很大的不同, AWT/SWING  是模拟本机窗口组件, SWT/JFace 则是直接调用本机窗口组件,当本机没有所需组件时才进行模拟。

2,SWT/JFace 的缺点是?

它没有java的跨平台的特性,每个OS要用eclipse,都需要重新移植一次SWT/JFace ,这也是SWT/JFace 最具争议的地方。不过因为SWT/JFace 已经移植到了几个主流的OS上了,所以这已经不再是什么严重的问题了。

3,eclipse可以用来开发JAVACC++

eclipse有极为强大的集成开发环境,它集成了CVS, JUnit, Ant, 并且强大的代码重构功能独步江湖、无人能及。eclipse的安装包集成了java开发环境的插件、JDT、所以、它是默认的java开发工具、但它不仅对java开发、给它装上C/C++的插件、就用可以用开发CC++了。

4eclipse常用插件的安装、以及下载地址。

eclipse的插件安装其实很简单、只需要将安装的插件包拷贝到eclipse下面的pluginsok了。
SWT Designer
是一个很好的eclipseSWT 界面开发插件包、SWT Designer支持、界面组件拖拉操作
官方网站地址: http://www.swt-designer.com
MyEclipse:j2ee开发插件、支持jspejb、数据库操作。官方网站地址:http://www.myeclipseide.com/
lomboz:
是和MyEclipse 同类型的插件、不过 MyEclipse 是收费的、 lomboz免费  这样的插件有很多、这里就不详细介绍了。

5, SWT/JFace的简单介绍!

SWT/JFace 有多强大,看看eclipse3.0(and以后版本),就可以清楚的知道了。   首先, JFace是为了方便开发SWT程序,SWT基础上创建的一个更易用,功能强大的图形包。然而, JFace并不能完全覆盖SWT的所有功能,所以,编程时,JFaceSWT都会被用到,但是一般来说能用JFace组件,就最好不要用SWT的。

6, SWT中的包!

    org.eclipse.swt.widgets

    最常用的组件基本都在这个包里,:button,text,label,combo,其中两个最重要的组件当数,shell composite;shell相当于应用程序的主窗口,composite,相当于SWING中的panel对象,时容纳组件的容器。

    org.eclipse.swt.layout

    主要的界面布局方式在该包中。SWT对组件的布局也采用了AWT/SWING中的Layout Layout Data 结合的方式

    org.eclipse.swt.custom

    对一些基本图形组件的扩展在该包中。例如:其中的CLabel就是对标准Label组件的扩展,CLabel上可以同时加入文字和图片。在该包中还有一个新的布局方式StackLayout

    org.eclipse.swt.event

    SWT采用和AWT/SWING一样的时间模型,在包中,可以找到事件监听类和相应的事件对象。例如:鼠标事件监听器MouseListener,MouseMoveListener,以及对应的事件对象MouseEvent

    org.eclipse.swt.graphics

    该包中,包含针对图片,光标,字体和绘图API。例如:可通过IMAGE类来调用系统中不同类型的图片。

    org.eclipse.swt.ole.win32

对不同平台,SWT有一些针对性的API。例如,Windows平台,可以通过该包很容易的调用ole组件,这使得SWT程序也可以内嵌IE浏览器或Word,Excel等程序。

 

eclipse学习笔记!(2) ----- SWT Designer 概述收藏

 SWT Designer是优秀的SWT/JFace开发辅助工具, 以下通过写一个Hello World的小程序来简单了解下SWT!

        首先从官方网站下载http://www.swt-designer.com,之后,把对应的文件拷贝到Eclipse目录下,这时,Eclipsewindows的首选项里面,就可以看到designer,点击注册,通过注册机完成注册!

        然后新建项目时候,选择designer下面的 SWT/JFace java project , 项目名字右键 new other ... designer... Swt...Application Window 选项新建一个3 main 主函数的, 然后就可以运行这个类了。生成的代码如下:

package src;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class HelloWorld ...{

    /** */
/**
     * Launch the application
     * 
@param args
     */

    
public static void main(String[] args) ...{
        
//display负责管理事件循环和控制UI线程和其他线程之间的通信
        final Display display = Display.getDefault();
        
final Shell shell = new Shell(); //SHELL是程序的主窗口
        shell.setSize(500, 375);         //主窗口大小
        shell.setText("SWT Application");//主窗口标题
        //

        shell.open();
        shell.layout();
        
while (!shell.isDisposed()) ...{      //如果,主窗口没有关闭,则一直循环
            if (!display.readAndDispatch())//如果DISPLAY不忙
                display.sleep();           //DISPLAY休眠
        }
    }
}

从这个代码可以看到,创建一个典型的SWT应用程序需要以下的步骤:

·            创建一个Display

·            创建一个或多个Shell

·            设置SHELL的布局

·            创建Shell中的组件(以上代码中没有组件,只有一个主窗口,run时候就可以看到一个空的窗口)

·            open()方法打开Shell窗口

·            写一个事件转发循环

·            销毁Display

下面,进行窗口中组件的添加, 首先, 把视图切换到designer,选择SWT Controls分类下的text 组件,放入窗口中,然后对这个组件的属性设置中的 text 设置为 HelloWorld (其他的属性都可以根据自己的情况来设定)  但是 SWT Designer 还无法完成所有的界面设计工作,所以,界面开发中,仍然是以代码设计为主的, 另外 SWT Designer 还不是狠稳定, 界面加入太多的组件或频繁的添加删除组件,都有可能造成内存耗尽而死机。

 

eclipse学习笔记!(3) ----- SWT Designer SWT/JFace 事件的四种写法以及常用的事件收藏

SWT/JFace 事件的四种写法

SWT 的事件模型和 JAVA 标准的 AWT 基本一样的。下面将按照,事件的四种写法来实现它。下面的代码都是和上一个学习笔记里的小例子变化来的。

·            匿名内部类写法  

在原来代码行"HelloWorldText = new Text(shell, SWT.BORDER);"下面插入如下的代码:

        HelloWorldText.addMouseListener(new MouseAdapter()...{
            
public void mouseDoubleClick(MouseEvent e) ...{
                MessageDialog.openInformation(
null,"","Hello world");
            }
        });

new MouseAdapter(); 就是一个匿名内部类。我们建立了一个继承于MouseAdapter的类,但并没有给这个类命名,并且没有用通常的写法,而是直接在HelloWorldText.addMouseListener(),写下了这个类的代码,这就是所谓的匿名内部类。

缺点:

1.        由于事件处理,代码会随着组件一起分散到代码中的各个部分,不集中,导致阅读和维护的不便。

2.        各事件的处理全部由嵌套的程序块组成,视觉上很乱,如果事件处理代码很长,也会导致阅读和维护不便。

3.        当菜单栏,工具栏等也需要处理相同的用户行为时,无法重用事件中的处理代码,导致代码不够简洁。

·            命名内部类写法

     事件代码使用命名内部类的方式,可以解决匿名内部类的存在的问题, 首先,事件处理代码都集中在一起,并具有有意义的名字,程序容易阅读和维护;另外单个事件的处理程序也可以被工具栏,菜单栏等重用。代码如下:

public class HelloWorld ...{
    
private static Text HelloWorldText;

    
public static void main(String[] args) ...{
        ... ...
        HelloWorldText = 
new Text(shell, SWT.BORDER);        
        HelloWorldText.addMouseListener(
new MyMouseDoubleClick());//引用定义的类
        ... ...
    }
    
// 定义一个匿名内部类
    private static final class MyMouseDoubleClick extends MouseAdapter...{
        
public void mouseDoubleClick(MouseEvent e) ...{
            MessageDialog.openInformation(
null,"","Hello ... ai wo , ni shi wo de !!!");
        }        
    }
}

·            外部类写法

     这种写法和命名内部类有些相似,只不过是将MyMouseDoubleClick类从HelloWorld.java 中拿出去,单独写成一个类文件。代码和命名内部类的相同,我就不重复了。

·            实现监听接口的写法

     HelloWorld 类实现 MouseListener 接口,这样类本身就成了一个监听器,使得加入监听器的代码可以更加的简洁,这种方式适合加入监听器的组件较多,并且要求监听器的事件处理代码可以被组件共用。
   
实现MouseListener接口要写的事件方法多一些,没有用到的可以为空实现。如果继承MouseListener 接口的适配器MouseAdapter, 则只写需要的方法就可以了。另外需要注意的是,只有接口才有多继承的特性,所以,如果HelloWorld已经是某个类的子类了,就只能用实现接口的方式,而不能继承接口的适配器了。代码如下:

public class HelloWorld implements MouseListener...// or extends MouseAdapter
    public static void main(String[] args) ...{
        
final Display display = Display.getDefault();
        
final Shell shell = new Shell();
        shell.setSize(500, 375);
        shell.setText("SWT Application");
        shell.open();

        Text HelloWorldText = 
new Text(shell, SWT.BORDER);
        HelloWorldText.addMouseListener(
new HelloWorld());
        HelloWorldText.setText("HelloWorld");
        HelloWorldText.setBounds(52, 68, 349, 29);
        shell.layout();
        
while (!shell.isDisposed()) ...{
            
if (!display.readAndDispatch())
                display.sleep();
        }
    }  

    
public void mouseDoubleClick(MouseEvent e) ...{
        MessageDialog.openInformation(
null,"","Hello ... ai wo de re  !!");
    }

    
//if extends MouseAdapter , delete the follow methods 
    public void mouseDown(MouseEvent e) ...{        
    }

    
public void mouseUp(MouseEvent e) ...{     
    }
}

SWT/JFace 中常用的事件

    除了,上面用到的addMouseListener, Eclipse 还有一些常用的监听器,它们在各组件里的使用方法相同(如果该组件支持此种事件),简单介绍如下:

·            addSelectionListener: 这个监听最常用。

widgetSelected 方法:当组件被选择(单击鼠标或按回车键)时触发此方法的事件处理程序。
widgetDefaultSelected
方法: 用于某些很少触发选择事件的组件,例如:文本框回车事件,列表框双击事件等。

·            addKeyListener:

keyPressed 方法:当前焦点停留在组件时,按下键盘任意键时触发,但对于某些组件(:button),按回车键无法执行此方法。
keyReleased
方法: 按键弹起时触发。

·            addFocusListener

focusGained方法得到焦点时触发。
focusLost
方法: 失去焦点时触发。

 

eclipse学习笔记!(4) ----- SWT Designer SWT常用组件收藏

·             一个button类的实例 

基本的步骤和之前的是一样的,一个SWT的项目,然后在页面设置面板里添加button。双击button(直接在source里面添加了监听器的代码)。下面是代码:

public class ButtonTest ...{
    
public static void main(String[] args) ...{
        
final Display display = Display.getDefault();
        
final Shell shell = new Shell();
        shell.setSize(500, 375);
        shell.setText("SWT Application");
        shell.open();

        
final Button okButton = new Button(shell, SWT.NONE);
        
//因为是比较简单的例子,只在这一个地方用这个的原因,所以用匿名方式
        okButton.addMouseListener(new MouseAdapter() ...{
            
public void mouseUp(MouseEvent e) ...{
                MessageDialog.openInformation(
null,"","you click the "+ okButton.getText() +"button");
            }
        });
        okButton.setText("OK.");
        okButton.setBounds(97, 196, 244, 54);
        shell.layout();
        
while (!shell.isDisposed()) ...{
            
if (!display.readAndDispatch())
                display.sleep();
        }
    }
}

程序说明: Button类的构造方法是new ButtonComposite parentint style),它有2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值