不少人觉得swt与swing是同一种东西。其实否则。java
AWT的优点在于,简单,稳定,兼容于任何一个java版本。也支持GUI组件的自动disposal。同时也是线程安全的。在AWT 中的图形用户界面是经过本地方法来实现的,每一个AWT 方法都有一个与其对应的本地方法,称为peer。因为平台无关性的须要,AWT 所可以实现的功能是各类不一样操做系统的图形库所提供的功能的交集。linux
而SWING,则是为了解决AWT的不少缺点。SWING 提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,因此同Java自己同样能够跨平台运行,这一点不像AWT。 它们是JFC的一部分。 它们支持可更换的观感和主题(各类操做系统默认的特有主题),然而不是真的使用原平生台提供的设备,而是仅仅在表面上模仿它们。这意味着你能够在任意平台上使用JAVA支持的任意观感。 轻量级元件的缺点则是执行速度较慢,优势就是能够在全部平台上采用统一的行为。
web
Eclipse项目用称为SWT的的图形库和工具包取代了Java标准中的AWT和Swing。SWT直接调用了操做系统的图形库,从而使得Java应用程序的Look & Feel 与操做系统的习惯彻底一致;更为重要的是,对本地方法的直接调用大幅度的提升了基于SWT 的Java应用程序的运行速度。SWT 的缺点主要在于两点:(1) 不是Java语言标准;和(2) 支持的平台太少。
编程
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问题致使了一些主要平台特征的遗失。c#
Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可使用任何可插拔的外观风格。Swing开发人员只用不多的代码就能够利用Swing丰富、灵活的功能和模块化组件来建立优雅的用户界面。 工具包中全部的包都是以swing做为名称,例如javax.swing,javax.swing.eventwindows
公司项目须要作一个java swt程序监控服务器硬件,网络等各方面状态。用sigar实现的。目前已经差很少了。而后还须要作一个客户端程序安装在运维程序的电脑上,一旦服务器状态出现异常,能够及时处理。没办法。只好用java再作一个swt程序来实现。其实我以为用c#实现可能更容易。呵呵。不过公司要求的是用java,就来初识java swt吧。至于为什么选用swt缘由很简单,它提供了不少的图形化界面。目前好像ORACLE的netBeans也有这种功能了。安全
开发SWT须要安装Matisse这个插件,网上找了很久才找到。新版的myeclipse是集成了的。不过个人是myeclipse6.5。服务器
Matisse4 for myeclipse下载地址:网络
安装后能够看到new时多了一个选项。选择一个Application或者Jframe均可以。点击finish完成。
若是点击finish完成后没有生成相应的.form和.java文件。极可能是没有导入相关的2个jar包。swing-layout.jar和absoluteLayout.jar。导入便可。
咱们能够右侧导航图看到相应的GUI。
如图:
熟悉C#的朋友,发现他还真像C#!。呵呵。至少我这种走过来的人这么认为。。。有图形控件能够拖动,属性,事件等。
点击source能够查看源码。发现入口函数就是一个main方法。运行发现窗体并非居中的。咱们让他居中须要修改入口函数以下:
[java] view plaincopy
<EMBED id=ZeroClipboardMovie_1 height=18 name=ZeroClipboardMovie_1 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=1&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
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()初始化组件。
若是咱们想要在它以前加入一个系统拖盘能够这么干:
[java] view plaincopy
<EMBED id=ZeroClipboardMovie_2 height=18 name=ZeroClipboardMovie_2 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=2&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
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();
}// 将托盘图表添加到系统托盘
}
}
[java] view plaincopy
<EMBED id=ZeroClipboardMovie_3 height=18 name=ZeroClipboardMovie_3 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=3&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
/** 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"));
}
如何判断你是单击?中击?右击?
[java] view plaincopy
<EMBED id=ZeroClipboardMovie_4 height=18 name=ZeroClipboardMovie_4 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=4&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
private void button1MouseClicked(java.awt.event.MouseEvent evt) {
int s=evt.getButton();
JOptionPane.showMessageDialog(null, s);
}
[java] view plaincopy
<EMBED id=ZeroClipboardMovie_5 height=18 name=ZeroClipboardMovie_5 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=5&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
evt.getButton()=1返回表示鼠标左键单击,2表示中击 3表示右键单击
choice中加入下拉选项,及判断选择:
[java] view plaincopy
<EMBED id=ZeroClipboardMovie_6 height=18 name=ZeroClipboardMovie_6 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=6&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
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");
}