swing的第一課

Swing介紹html

 

Swing API 可擴展 GUI組件,以減輕開發者的生活創造基於JAVA前端/GUI應用。它是創建在AWT API之上,並做爲 AWT API 的更換,由於它幾乎每個控制對應 AWT控制。 Swing 組件遵循模型 - 視圖 - 控制器架構,以知足如下標準。前端

  • 一個單一的 API 是足夠支持多種外觀和風格。java

  • API 模擬驅動,使最高級別的API不要求有數據。程序員

  • API 使用Java Bean的模式,使生成工具和IDE能夠提供更好的服務給開發者使用它。spring

MVC架構

Swing API架構以下鬆散的,基於MVC架構,如下列方式支付。shell

  • 模型表示組件的數據。瀏覽器

  • 查看錶明組件的數據可視化表示形式。bash

  • 控制器採用的視圖上的用戶輸入,並在組件的數據的變化反映。架構

  • Swing 組件模型做爲一個單獨的元素和景觀,是棒狀控制器部分用戶界面中的元素。使用這種方式,Swing具備可插拔的外觀與風格架構。app

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 元素。這部分將被覆蓋在事件處理「一章。

UI classes

每一個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"); JButton okButton = new JButton("OK"); JButton submitButton = new JButton("Submit"); JButton cancelButton = new JButton("Cancel"); okButton.setActionCommand("OK"); submitButton.setActionCommand("Submit"); cancelButton.setActionCommand("Cancel"); okButton.addActionListener(new ButtonClickListener()); submitButton.addActionListener(new ButtonClickListener()); cancelButton.addActionListener(new ButtonClickListener()); controlPanel.add(okButton); controlPanel.add(submitButton); controlPanel.add(cancelButton); mainFrame.setVisible(true); } private class ButtonClickListener implements ActionListener{ public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if( command.equals( "OK" )) { statusLabel.setText("Ok Button clicked."); } else if( command.equals( "Submit" ) ) { statusLabel.setText("Submit Button clicked."); } else { statusLabel.setText("Cancel Button clicked."); } } } }

編譯程序,使用命令提示符。到 D:/ > SWING 而後輸出如下命令。

D:AWT>javac comyiibaiguiSwingControlDemo.java

若是沒有錯誤出現,這意味着編譯成功。使用下面的命令來運行程序。

D:AWT>java com.yiibai.gui.SwingControlDemo

驗證下面的輸出

SWING  Event Handling

 

Swing事件監聽器

 

事件監聽器表明負責處理事件的接口。 Java 提供了各類事件監聽器類,但咱們將討論那些被更頻繁地使用。每個事件監聽器方法具備方法的EventObject類的子類的對象,這是做爲一個單獨的參數。例如,鼠標事件偵聽器方法將接受MouseEvent的實例,其中派生的事件的EventObject。

EventListner 接口

它是一個標記接口,每個監聽器接口擴展。這個類定義在java.util包。

類聲明

如下是聲明java.util.EventListener接口:

public interface EventListener

Swing事件監聽器接口:

如下是經常使用的的事件監聽器列表。

 

Sr. No. Control & Description
1 ActionListener
該接口用於接收動做事件。
2 ComponentListener
該接口用於接收組件事件。
3 ItemListener
該接口用於接收項目事件。
4 KeyListener
該接口用於接收按鍵事件。
5 MouseListener
該接口用於接收鼠標事件。
6 WindowListener
該接口用於接收窗口事件。
7 AdjustmentListener
該接口用於接收調整事件。
8 ContainerListener
該接口用於接收容器事件。
9 MouseMotionListener
此接口用於接收鼠標移動事件。
10 FocusListener
該接口用於接收焦點事件。

 

Swing事件適配器

 

適配器是抽象類,用於接收各類事件。這些類中的方法是空的。這些類存在的目的是方便建立監聽器對象。

SWING適配器:

如下是經常使用的適配器列表,監聽SWING GUI事件。

 

Sr. No. 適配器&說明
1 FocusAdapter
接收焦點事件的抽象適配器類。
2 KeyAdapter
接收按鍵事件的抽象適配器類。
3 MouseAdapter
接收鼠標事件的抽象適配器類。
4 MouseMotionAdapter
接收鼠標移動事件的抽象適配器類。
5 WindowAdapter
接收窗口事件的抽象適配器類。

 

Swing Layout佈局

 

佈局的意味着,在容器內的配置的組件。在其餘的方式,咱們能夠認爲在一個特定的容器內的位置放置組件。佈局管理器所控制布點的任務是自動完成的。

佈局管理器

佈局管理器自動定位容器內的全部組件。若是咱們不使用佈局管理器,而後定位組件的默認佈局管理器。這是可能的手工佈局的控制,但因爲如下兩個緣由,它變得很是困難。

  • 這是很是繁瑣的容器內處理大量的控制。

  • 一般當咱們須要安排他們沒有給出一個組件的寬度和高度信息。

Java 爲咱們提供了各類佈局管理器來定位控制。屬性如大小,形狀和排列變化從一個佈局管理器,其餘的佈局管理器。的小應用程序或應用程序窗口的大小改變時,即佈局管理器applet瀏覽器或應用程序窗口的尺寸適應於響應的大小,形狀和排列的組件也隨之變化。

佈局管理器關聯的與每一個容器對象。每個佈局管理器是實現佈局管理接口的類的一個對象。

如下是接口定義佈局管理器的功能。

Sr. No. 接口&說明
1 LayoutManager
佈局管理器接口聲明的對象將充當一個佈局管理器類須要實現的方法。
2 LayoutManager2
LayoutManager2中的子接口布局管理。這個接口是爲那些知道如何佈局容器的基礎上佈局約束對象的類。

AWT佈局管理器類:

如下是經常使用的控件列表而設計的圖形用戶界面使用AWT

 

Sr. No. LayoutManager & Description
1 BorderLayout
The borderlayout arranges the components to fit in the five regions: east, west, north, south and center.
2 CardLayout
The CardLayout object treats each component in the container as a card. Only one card is visible at a time.
3 FlowLayout
The FlowLayout is the default layout.It layouts the components in a directional flow.
4 GridLayout
The GridLayout manages the components in form of a rectangular grid.
5 GridBagLayout
This is the most flexible layout manager class.The object of GridBagLayout aligns the component vertically,horizontally or along their baseline without requiring the components of same size.
6 GroupLayout
The GroupLayout hierarchically groups components in order to position them in a Container.
7 SpringLayout
A SpringLayout positions the children of its associated container according to a set of constraints.

 

Swing Menu菜單類

 

 

正如咱們所知道與菜單相關的每個頂層窗口有一個菜單欄。此菜單欄包括提供給最終用戶的各類菜單的選擇。此外,每一個選擇包含這就是所謂的下拉菜單中的選項列表。菜單和菜單項的控件是MenuComponent類的子類。

菜單層次結構

Swing Menu Hiearchy

菜單控件

Sr. No. 控件& 描述
1 JMenuBar
JMenuBar的對象是與頂層窗口。
2 JMenuItem
菜單中的項目必須屬於JMenuItem的或任何其子類。
3 JMenu
JMenu對象是從菜單欄中顯示一個下拉菜單組件。
4 JCheckboxMenuItem
JCheckBoxMenuItem 必須爲 JMenuItem的子類。
5 JRadioButtonMenuItem
JRadioButtonMenuItem對象是JMenuItem的子類。
6 JPopupMenu
JPopupMenu彈出能夠在一個組件內的指定位置動態彈出。

 

以上內容轉載自http://www.yiibai.com/swing/