不少人覺得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");
}