Swing介紹html
Swing API 可擴展 GUI組件,以減輕開發者的生活創造基於JAVA前端/GUI應用。它是創建在AWT API之上,並做爲 AWT API 的更換,由於它幾乎每個控制對應 AWT控制。 Swing 組件遵循模型 - 視圖 - 控制器架構,以知足如下標準。前端
一個單一的 API 是足夠支持多種外觀和風格。java
API 模擬驅動,使最高級別的API不要求有數據。程序員
API 使用Java Bean的模式,使生成工具和IDE能夠提供更好的服務給開發者使用它。spring
Swing API架構以下鬆散的,基於MVC架構,如下列方式支付。shell
模型表示組件的數據。瀏覽器
查看錶明組件的數據可視化表示形式。bash
控制器採用的視圖上的用戶輸入,並在組件的數據的變化反映。架構
Swing 組件模型做爲一個單獨的元素和景觀,是棒狀控制器部分用戶界面中的元素。使用這種方式,Swing具備可插拔的外觀與風格架構。app
重量輕 - Swing 組件是獨立的原生操做系統的API與Swing API控件呈現大多采用純JAVA代碼,而不是底層的操做系統調用。
豐富的控件 - Swing 提供了一套豐富的先進的控制系統,如樹,JTabbedPane,滑塊,顏色選擇器,表格控件
高度可定製 - Swing 控件能夠定製視覺外觀是很是簡單的方法,獨立的內部表示。
可插拔的外觀和感受 - 基於Swing GUI應用程序外觀和風格基於可用值,能夠在運行時改變。
Swing開發環境安裝
本節將指導如何下載和設置Java 在您的機器上。請按照下列步驟來設置環境。
Java SE 是免費的,提供的連接下載Java。因此根據您的操做系統,下載一個版本。
按照說明下載 java 和運行 .exe 在你的機器上安裝Java。一旦在機器上安裝了Java,還須要設置環境變量指向正確的安裝目錄:
假設您已經安裝了Java在c:Program Filesjavajdk 目錄:
右鍵單擊 '個人電腦r' 並選擇 '屬性'。
點擊 '環境變量' 按鈕下 '高級' 標籤。
如今在 '路徑' 變量,它也包含Java可執行文件的路徑。 例如,若是路徑當前設置爲 'C:WINDOWSSYSTEM32', 而後可更改你的路徑爲 'C:WINDOWSSYSTEM32;c:Program Filesjavajdkin'.
應設置環境變量PATH指向Java二進制文件已經安裝。若是你這樣作有困難,請參閱shell文件。
例如,若是使用bash做爲shell,添加如下行到結束行 「.bashrc文件中: '.bashrc: export PATH=/path/to/java:$PATH'
編寫Java程序,須要一個好的文本編輯器。在市場上有更復雜的 IDE。但如今,能夠考慮如下兩種:
記事本: 在Windows機器上,你可使用任何簡單的文本編輯器(如記事本)(本教程推薦TextPad)。
Netbeans:是一個Java IDE,它是開源和免費,可下載 http://www.netbeans.org/index.htmll.
Eclipse : 也是一個Java IDE Eclipse開源社區開發的,能夠直接從網上下載 http://www.eclipse.org/.
Swing控件
每個用戶界面參考主要有如下三個方面:
UI 元素: 有核心視覺元素,最終用戶看到並與之交互。 GWT 提供了一個巨大的名單變化更復雜,本教程咱們從基本的普遍使用和常見的元素。
佈局: 他們定義 UI 元素如何應安排在屏幕上,並提供一個最終的外觀和感受的GUI(圖形用戶界面)。在「佈局」一章,這部分將被覆蓋。
行爲: 這些事件發生時,與用戶交互的 UI 元素。這部分將被覆蓋在事件處理「一章。
每一個Swing 控件繼承屬性從如下組件的類層次結構。
Sr. No. | 類 & 描述 |
---|---|
1 | Component 容器是一個抽象基類的非菜單用戶界面控件擺動。部分指圖形表示的對象 |
2 | Container Container是一個組件,它能夠包含其餘Swing組件。 |
3 | JComponent JComponent是一個基類,全部Swing UI 組件。爲了使用繼承自JComponent 的 swing組件,組件必須是一個包容層次結構,其根是一個頂層的Swing容器。 |
如下是經常使用的控件列表而設計的圖形用戶界面使用Swing。
Sr. No. | 控件& 描述 |
---|---|
1 | JLabel 一個JLabel對象是在容器中放置文本的一個組成部分。 |
2 | JButton 該類建立標記的按鈕。 |
3 | JColorChooser JColorChooser提供一個用於控制窗格設計,讓用戶操做和選擇顏色。 |
4 | JCheck Box JCheckBox的是一個圖形化的組件能夠在一個(true)或關閉(false)狀態時。 |
5 | JRadioButton JRadioButton類是一個圖形化的組件能夠在一個(true)或關閉(false)狀態時。在一組。 |
6 | JList JList組件向用戶展現一個滾動的文本項列表。 |
7 | JComboBox JComboBox組件爲用戶提供了一個選擇顯示菜單。 |
8 | JTextField JTextField的對象是一個文本組件,它容許編輯的單行文本。 |
9 | JPasswordField JPasswordField中對象是一個專門用於輸入密碼的文本組件。 |
10 | JTextArea JTextArea對象是一個文本組件,它容許編輯的多行文本。 |
11 | ImageIcon ImageIcon的控件的圖標界面,實現從圖像繪製圖標 |
12 | JScrollbar Scrollbar控件表明一個滾動條組件以讓用戶從範圍選擇的值。 |
13 | JOptionPane JOptionPane的規定設置標準對話框,提示用戶提供值或向其發出通知。 |
14 | JFileChooser JFileChooser的控制表明一個對話框窗口,用戶能夠選擇一個文件。 |
15 | JProgressBar 隨着任務的進展,進度條接近完成顯示任務的完成百分比。 |
16 | JSlider JSlider讓用戶以圖形界的時間間隔內滑動旋鈕選擇一個值。 |
17 | JSpinner JSpinner讓用戶從一個有序序列中選擇一個數字或者一個對象值的單行輸入字段。 |
Swing事件處理
一個對象的狀態變化被稱爲事件,即事件描述源狀態的變化。事件產生的結果與用戶交互的圖形用戶界面組件。例如,點擊一個按鈕,移動鼠標,經過鍵盤輸入一個字符,從列表中選擇一個項目,滾動頁面的活動,使一個事件的發生。
事件能夠被大體分爲兩類:
前臺事件 - 這些事件須要用戶直接互動。在圖形用戶界面中的圖形組件交互的人產生的後果。例如,點擊一個按鈕,移動鼠標,經過鍵盤輸入一個字符,從列表中選擇一個項目,滾動頁面等
後臺事件 - 這些事件,須要最終用戶的交互是已知的做爲背景的事件。操做系統的中斷,硬件或軟件故障,定時器到期時,操做完成的背景事件的例子。
事件處理機制,控制的事件,並決定若是一個事件發生時,會發生什麼。這種機制被稱爲事件處理程序,在事件發生時執行的代碼。 Java使用代理事件模型來處理事件。該模型定義了標準的機制來生成和處理事件。讓咱們簡要介紹這種模式。
代理事件模型具備如下的主要參與者,即:
源 - 源是一個對象,在該對象上的事件發生。它的處理器提供發生事件的信息來源是可靠的。 JAVA提供與源對象的類。
監聽器 - 它也被稱爲做爲事件handler.Listener是負責產生響應一個事件。從Java實現的角度來看,監聽器也是一個對象。等待直到它接收到一個事件監聽器。一旦收到事件,監聽器進程的事件就返回。
這種方法的好處是,用戶界面邏輯徹底分開,生成該事件的邏輯。用戶界面元素是可以委派的事件處理單獨的一段代碼。在這個模型中,須要與源對象註冊監聽使偵聽器可以接收事件通知。這是一個有效的方式處理事件,由於這些事件通知只發送給那些監聽器要接收他們。
用戶單擊該按鈕時產生該事件。
如今有關事件類的對象是自動建立的信息源和事件在同一對象獲得填充。
事件對象被轉發註冊監聽器類的方法。
該方法如今獲得執行並返回。
爲了設計一個監聽類,咱們必須開發一些監聽器接口。這些監聽器接口預測一些公共的抽象監聽器類必須實現的回調方法。
若是不執行任何預約義的接口,類不能做爲源對象的監聽器類。
這些方法所提供的API提供程序,被定義爲應用程序員和應用程序開發者調用。這裏的回調方法表明一個事件的方法。在響應一個事件的Java JRE將觸發回調方法。全部這些回調方法的監聽器接口。
若是一個組件須要一些監聽器會聽的事件源必須註冊本身監聽。
選擇使用任何編輯器建立如下java程序在 D:/ > SWING > com > yiibai > gui >
SwingControlDemo.java
package com.yiibai.gui; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SwingControlDemo { private JFrame mainFrame; private JLabel headerLabel; private JLabel statusLabel; private JPanel controlPanel; public SwingLayoutDemo(){ prepareGUI(); } public static void main(String[] args){ SwingLayoutDemo swingLayoutDemo = new SwingLayoutDemo(); swingLayoutDemo.showEventDemo(); } private void prepareGUI(){ mainFrame = new JFrame("Java SWING Examples"); mainFrame.setSize(400,400); mainFrame.setLayout(new GridLayout(3, 1)); headerLabel = new JLabel("",JLabel.CENTER ); statusLabel = new JLabel("",JLabel.CENTER); statusLabel.setSize(350,100); mainFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent windowEvent){ System.exit(0); } }); controlPanel = new JPanel(); controlPanel.setLayout(new FlowLayout()); mainFrame.add(headerLabel); mainFrame.add(controlPanel); mainFrame.add(statusLabel); mainFrame.setVisible(true); } private void showEventDemo(){ headerLabel.setText("Control in action: Button");