JAVA Swt
进入java C/S世界

很多人以为swt与swing是同一种东西。其实不然。

awt/swing是sun公司发布的jdk里的,拥有较强的跨平台性。swt/jface是开发eclipse用的一系列框架,后来单独分离出来。跨平台性相对差,这里只是说相对于linux/unix而言。因为它一定程序上利用了windows。它是IBM在AWT和Swing上经过优化开发出的新的GUI。也许你很难想像用SWT开发出eclipse,然后又在eclipse上开发Swt应用吧。

AWT的优势在于,简单,稳定,兼容于任何一个java版本。也支持GUI组件的自动disposal。同时也是线程安全的。在AWT 中的图形用户界面是通过本地方法来实现的,每个AWT 方法都有一个与其对应的本地方法,称为peer。由于平台无关性的需要,AWT 所能够实现的功能是各种不同操作系统的图形库所提供的功能的交集。

而SWING,则是为了解决AWT的很多缺点。SWING 提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT。 它们是JFC的一部分。 它们支持可更换的观感和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台上使用JAVA支持的任意观感。 轻量级元件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。

Eclipse项目用称为SWT的的图形库和工具包取代了Java标准中的AWT和Swing。SWT直接调用了操作系统的图形库,从而使得Java应用程序的Look & Feel 与操作系统的习惯完全一致;更为重要的是,对本地方法的直接调用大幅度的提高了基于SWT 的Java应用程序的运行速度。SWT 的缺点主要在于两点:(1) 不是Java语言标准;和(2) 支持的平台太少。

AWT的含义

SWT(Standard Widget Toolkit) Standard Widget Toolkit是一个开源的GUI编程框架,与AWT/Swing有相似的用处,著名的开源IDE-eclipse就是用SWT开发的。 在SWT之前,Sun已经提供了一个跨平台GUI开发工具包AWT (Abstract Windowing Toolkit). 虽然AWT框架也使用的是原生窗口部件(native widgets),但是它一直未能突破LCD问题。LCD问题导致了一些主要平台特征的遗失。

Swing的含义

Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。 工具包中所有的包都是以swing作为名称,例如javax.swing,javax.swing.event

公司项目需要做一个java swt程序监控服务器硬件,网络等各方面状态。用sigar实现的。目前已经差不多了。然后还需要做一个客户端程序安装在运维程序的电脑上,一旦服务器状态出现异常,可以及时处理。没办法。只好用java再做一个swt程序来实现。其实我觉得用c#实现可能更容易。呵呵。不过公司要求的是用java,就来初识java swt吧。至于为何选用swt原因很简单,它提供了很多的图形化界面。目前好像ORACLE的netBeans也有这种功能了。

开发SWT需要安装Matisse这个插件,网上找了好久才找到。新版的myeclipse是集成了的。不过我的是myeclipse6.5。

Matisse4 for myeclipse下载地址:

matisse4 for myeclipse

安装后可以看到new时多了一个选项。选择一个Application或者Jframe都可以。点击finish完成。

如果点击finish完成后没有生成相应的.form和.java文件。很可能是没有导入相关的2个jar包。swing-layout.jar和absoluteLayout.jar。导入即可。

我们可以右侧导航图看到相应的GUI。

如图:

熟悉C#的朋友,发现他还真像C#!。呵呵。至少我这种走过来的人这么认为。。。有图形控件可以拖动,属性,事件等。

点击source可以查看源码。发现入口函数就是一个main方法。运行发现窗体并不是居中的。我们让他居中需要修改入口函数如下:

public static void main(String args[]) {  java.awt.EventQueue.invokeLater(new Runnable() {   public void run() {    Main main = new Main();    main.setVisible(true);    main.setLocationRelativeTo(null);//null,则此窗口将置于屏幕的中央    main.jButton1ActionPerformed(null);   }  }); }

我们可以发现还有另外一个main方法,他是初始化组件的。包括初始化前,正在初始化和初始化后,默认只有initCompent()初始化组件。

如果我们想要在它之前加入一个系统拖盘可以这么干:

TrayIcon icon; public static boolean flag = true; private void init() {  String root = System.getProperty("user.dir");  System.out.println(root);  icon = new TrayIcon(Toolkit.getDefaultToolkit().createImage(    root + "/resource/img/1.jpg"));  if (SystemTray.isSupported()) {// 判断系统是否托盘   // 创建一个托盘图标对象   // 创建弹出菜单   PopupMenu menu = new PopupMenu();   // 添加一个用于退出的按钮   MenuItem item = new MenuItem("EXIT");   MenuItem item2 = new MenuItem("STOP");   item.addActionListener(new ActionListener() {    public void actionPerformed(ActionEvent e) {     try {      System.exit(0);     } catch (Exception ex) {      System.exit(0);     }    }   });   item2.addActionListener(new ActionListener() {    public void actionPerformed(ActionEvent e) {     try {      flag = false;      jButton1.setEnabled(true);      jButton2.setEnabled(false);      setInfo("\n程序已经正常停止");     } catch (Exception ex) {      System.exit(0);     }    }   });   menu.add(item);   menu.add(item2);   // 添加弹出菜单到托盘图标   icon.setPopupMenu(menu);   icon.setToolTip("信息收集器正在运行中......");   // --托盘单事件    icon.addMouseListener(new MouseAdapter() {    public void mouseClicked(final MouseEvent e) {     if (e.getButton() == MouseEvent.BUTTON1) {      setVisible(true);      setState(Frame.NORMAL);     }    }   });   SystemTray tray = SystemTray.getSystemTray();// 获取系统托盘   try {    tray.add(icon);   } catch (AWTException e1) {    e1.printStackTrace();   }// 将托盘图表添加到系统托盘  } }
/** Creates new form Main */ public Main() {  init();  initComponents();  initOther(); } private void initOther() {  String root = System.getProperty("user.dir");  System.out.println(root);  Toolkit tk = Toolkit.getDefaultToolkit();  this.setIconImage(tk.createImage(root + "/resource/img/1.jpg")); }

如何判断你是单击?中击?右击?

private void button1MouseClicked(java.awt.event.MouseEvent evt) {  int s=evt.getButton();  JOptionPane.showMessageDialog(null, s); }
evt.getButton()=1返回表示鼠标左键单击,2表示中击 3表示右键单击

choice中加入下拉选项,及判断选择:

private void choice1ItemStateChanged(java.awt.event.ItemEvent evt) {  String str=choice1.getSelectedItem();  JOptionPane.showMessageDialog(null, str); } private void initData() {  choice1.add("1");  choice1.add("2");  choice1.add("3");  choice1.add("4"); }

未完。待续。。。吃饭睡觉了。

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

JAVA Swt初识相关推荐

  1. Java基础-初识面向对象编程(Object-Oriented-Programming)

    Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...

  2. java学习(137):java异常初识

    //java异常初识 public class test78 {public static void main(String[] args) {countArraylength( -1 );}publ ...

  3. java实现redis客户端_windows下java swt实现操作redis的客户端工具

    redisclient 1.0 正式发布,适用于多个 Redis 版本,主要更新内容如下: 1.管理 Redis 服务器 2.管理 Redis data favorite 3.管理 Redis 数据 ...

  4. java多线程初识4

    java多线程初识4 进程的概念 进程:官方的语言是计算机中的程序,关于某数据集合上的一次运行活动.使系统进行资源分配和调度的基本单位单位,是操作系统的基本单位,是操作系统结构的基础.在现在的线程设计 ...

  5. 【零基础学Java】—初识Java(一)

    [零基础学Java]- 初识Java(一)

  6. java swt shell_一个java swt桌面程序开发到打包的总结(1)

    一个java swt桌面程序开发到打包的总结(1) --概述与关于swt的问题 一.概述: 几天一直在用金山打字通练习英语(本人英语比较烂),把金山打字能里面的文章全部掠了N遍.打的没意思了,想想怎么 ...

  7. java swt 状态栏_java – 在Mac上美化SWT应用程序

    SWT旨在实现跨平台,因此可以在Mac上运行.问题是它承认了麦克兰的主要罪行 – 它是UGLY.工具栏看起来不像Mac工具栏,状态栏看起来不像Mac状态栏等. 有没有人有任何使SWT应用程序看起来更像 ...

  8. java swt 画按钮_向表中添加按钮(java swt)

    我正在尝试复制类似于此的UI: 我一直在关注如何创建表格每列中的按钮的作者说明(没有成功).我的项目与他的区别在于我正在尝试使用Tree而不是Table,而我正在使用eclipse TreeViewe ...

  9. java swt 双屏_Java中AWT、Swing与SWT三大GUI技术的原理与效率差异

    看了一下对Java GUI讨论的帖子,所以写了一篇文章来阐述一下各种GUI技术的优劣. Java世界中,目前最知名的三大GUI库分别是: 1.AWT(Abstract Window Toolkit)抽 ...

最新文章

  1. mysql反弹提权_MySQL数据库反弹端口连接提权
  2. 程序员应当学会“偷懒”
  3. WTL 自绘 进度条Progressbar
  4. 未付服务网关限流作用
  5. 解决eclipse中jsp没有代码提示问题
  6. 数字图像处理技术的应 用领域
  7. Kafka 为什么能那么快的 6 个原因
  8. 算法笔记:简单的字符串模式匹配-KMP算法(与BF算法对比时间复杂度)
  9. 还在痴迷于大数据?未来 “小数据” 会让你大开眼界
  10. 处理日期和时间数据--字符串文字
  11. 2010年ImagineCup,我们共同走过
  12. 今年纽微特公司股东会不开了?
  13. 云原生分布式数据库和数据仓库崛起背后的原因
  14. iOS里的动态库和静态库
  15. 【牛刀小试4】斐波那契数
  16. HR问“什么时间可以入职”,这样回答最保险!
  17. 记录WIN10选择文件右键后资源管理器无响应的解决方法
  18. 常用的嵌入式硬件通信接口协议(UART、IIC、SPI、RS-232、RS-485、RS-422、CAN、USB、IRDA)(一)
  19. 纹理过滤函数glTexParameteri
  20. 实用工具推荐--GIF动图裁剪工具IIMG(免注册且免费)

热门文章

  1. 多波段影像 tif转为jpg(png)
  2. HTML5开发 页游/手游动画及游戏系列教程(Game Tutorial):(一)物体动起来吧
  3. 动态、静态和伪静态url路径如何分辨
  4. VMware内CentOS-7-Minimal的安装与配置(详细图文教程)
  5. 蒲公英分布平台下载更新实现
  6. Linux常见错误 “cp: omitting directory/ cp: :Permission denied”解决办法
  7. linux下安装安装jdk和安装android studio
  8. 职业+英语思维导图模板
  9. 【Java从零到架构师第③季】【49】会话管理—Token_ehcache
  10. 一篇文章搞定嵌入式看门狗watch dog概述与示例代码