Swing介紹
Swing API 可擴展 GUI組件,以減輕開發者的生活創造基於JAVA前端/GUI應用。它是建立在AWT API之上,並作為 AWT API 的更換,因為它幾乎每一個控制對應 AWT控制。 Swing 組件遵循模型 - 視圖 - 控制器架構,以滿足以下標准。
-
一個單一的 API 是足夠支持多種外觀和風格。
-
API 模擬驅動,使最高級別的API不要求有數據。
-
API 使用Java Bean的模式,使生成工具和IDE可以提供更好的服務給開發者使用它。
MVC架構
Swing API架構如下松散的,基於MVC架構,以下列方式支付。
-
模型表示組件的數據。
-
查看代表組件的數據可視化表示形式。
-
控制器采用的視圖上的用戶輸入,並在組件的數據的變化反映。
-
Swing 組件模型作為一個單獨的元素和景觀,是棒狀控制器部分用戶界面中的元素。使用這種方式,Swing具有可插拔的外觀與風格架構。
Swing 特點
-
重量輕 - Swing 組件是獨立的原生操作系統的API與Swing API控件呈現大多采用純JAVA代碼,而不是底層的操作系統調用。
-
豐富的控件 - Swing 提供了一套豐富的先進的控制系統,如樹,JTabbedPane,滑塊,顏色選擇器,表格控件
-
高度可定制 - Swing 控件可以定制視覺外觀是非常簡單的方法,獨立的內部表示。
-
可插拔的外觀和感覺 - 基於Swing GUI應用程序外觀和風格基於可用值,可以在運行時改變。
Swing開發環境安裝
本節將指導如何下載和設置Java 在您的機器上。請按照下列步驟來設置環境。
Java SE 是免費的,提供的鏈接下載Java。所以根據您的操作系統,下載一個版本。
按照說明下載 java 和運行 .exe 在你的機器上安裝Java。一旦在機器上安裝了Java,還需要設置環境變量指向正確的安裝目錄:
對於Windows 2000/XP/win7 路徑:
假設您已經安裝了Java在c:Program Filesjavajdk 目錄:
-
右鍵單擊 '我的電腦r' 並選擇 '屬性'。
-
點擊 '環境變量' 按鈕下 '高級' 標簽。
-
現在在 '路徑' 變量,它也包含Java可執行文件的路徑。 例如,如果路徑當前設置為 'C:WINDOWSSYSTEM32', 然后可更改你的路徑為 'C:WINDOWSSYSTEM32;c:Program Filesjavajdkin'.
適用於Linux,UNIX,Solaris和FreeBSD的路徑:
應設置環境變量PATH指向Java二進制文件已經安裝。如果你這樣做有困難,請參閱shell文件。
例如,如果使用bash作為shell,添加以下行到結束行 “.bashrc文件中: '.bashrc: export PATH=/path/to/java:$PATH'
流行的Java編輯器:
編寫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 UI 元素:
以下是常用的控件列表而設計的圖形用戶界面使用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");