乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Swing

       bez 2006-04-03
      swing入門  
        1  2005-12-30 12:15:26.0  
         本教程面向的是 Swing 的初學者。您可能知道其他人也在使用它,或者在您使用的應用程序中曾看見過它。再或者您可能已經(jīng)親自嘗試使用過它。不管屬于哪種情況,本教程都將帶您經(jīng)歷構建一個基本的 Swing 應用程序的過程,先從最常見的 HelloWorld 應用程序開始。當您在自己的機器上運行它之后,我們將向您介紹一些關于 Swing 的知識:創(chuàng)建一個航班預訂系統(tǒng),逐漸向其中添加內(nèi)容,直到您得到一個基本的,但卻完全能夠工作的應用程序.  
       

      開始之前

      關于本教程

      本教程面向的是 Swing 的初學者。您可能知道其他人也在使用它,或者在您使用的應用程序中曾看見過它。再或者您可能已經(jīng)親自嘗試使用過它。不管屬于哪種情況,本教程都將帶您經(jīng)歷構建一個基本的 Swing 應用程序的過程,先從最常見的 HelloWorld 應用程序開始。當您在自己的機器上運行它之后,我們將向您介紹一些關于 Swing 的知識:創(chuàng)建一個航班預訂系統(tǒng),逐漸向其中添加內(nèi)容,直到您得到一個基本的,但卻完全能夠工作的應用程序.

      在學習本教程期間,您將了解 Swing 中的所有入門組件;所謂入門組件,指的是您用來構造簡單用戶界面(UI)的組件。您將學習如何用基本的方法來設計這些組件的屬性,以及如何讓這些 Swing 組件與其他組件交互。您還將學習完成 Swing 知識還需要的其他 UI 概念,其中包括布局、事件/偵聽器和數(shù)據(jù)模型。在結束這篇教程的時候,您應當能夠構建一個簡單的 Swing 應用程序。

      請注意,本教程 不是 面向 Swing 初學者的全面指南。有專門用于 Swing 學習的整本的書籍,所以我不打算在這里重復這份工作。本教程的側重點是初學者,將介紹一些在實際工作中最可能運行的最常用的組件和函數(shù)。

      如果在完成這篇教程后,您有興趣進一步擴展自己的 Swing 編程知識,那么您應當閱讀稱為“中級 Swing”的同一系列教程,它建立在這篇教程介紹的概念和開發(fā)的示例應用程序之上。

      工具和源代碼下載

      要完成本教程,需要以下工具:

      • JDK 5.0。
      • 一個 IDE 或文本編輯器。推薦使用 Eclipse(請參閱 參考資料,以獲得關于 Eclipse 的更多信息)。
      • 用于航班預訂系統(tǒng)的 。

      關于作者

      Michael Abernethy 目前是位于德克薩斯澳斯汀的 IBM WebSphere System Management 團隊的測試小組組長。在這篇工作之前,他是多個客戶地點的 Swing UI 開發(fā)人員。

      Swing簡介

      UI 組件簡介

       在開始學習 Swing 之前,必須回答針對真正初學者的一個問題:什么是 UI?初學者的答案是“用戶界面”。但是因為本教程的目標是要保證您不再只是個初學者,所以我們需要比這個定義更高級的定義。

      所以,我再次提出這個問題:什么是 UI?您可能把它定義成您按下的按鈕、打字的地址欄 、打開和關閉的窗口,等等,這些都是 UI 的元素,但是除了在屏幕上看到的這些之外,還有更多都是 UI 元素。比如鼠標、鍵盤、音量、屏幕顏色、使用的字體,以及一個對象相對于另一個對象的位置,這些都包含在 UI 之中。實際上,在計算機和用戶的交互之中扮演角色的任何對象都是 UI 的組成部分。這看起來足夠簡單,但是您應當驚訝的是,有許多人和大型公司已經(jīng)為它努力了很多年。實際上,現(xiàn)在有的大學專業(yè)的惟一課程就是研究這種交互。

      Swing 的角色

       Swing 是 Java 平臺的 UI —— 它充當處理用戶和計算機之間全部交互的軟件。它實際上充當用戶和計算機內(nèi)部之間的中間人。Swing 到底是如何做這項工作的呢?它提供了處理前面一節(jié)中描述的 UI 各方面內(nèi)容的機制:

      • 鍵盤:Swing 提供了捕捉用戶輸入的方法。
      • 顏色:Swing 提供改變在屏幕上看到的顏色的方法。
      • 打字的地址欄:Swing 提供了文本組件,處理所有普通任務。
      • 音量:Swing 不太擅長。

      無論如何,Swing 為您提供了創(chuàng)建自己的 UI 所需要的所有工具。

      MVC

       Swing 甚至走得更遠一步,在基本的 UI 原則之上又放上了一個公共的設計模式。這個設計模式叫做模型-視圖-控制器(Model-View-Controller,MVC),它試圖“把角色分開”。MVC 讓負責顯示的代碼、處理數(shù)據(jù)的代碼、對交互進行響應并驅(qū)動變化的代碼彼此分離。

      有點迷惑?如果我為這個設計模式提供一個現(xiàn)實世界的非技術性示例,它就比較容易了。請想像一次時裝秀。把秀場當成 UI,假設服裝就是數(shù)據(jù),是展示給用戶的計算機信息?,F(xiàn)在,假設這次時裝秀中只有一個人。這個人設計服裝、修改服裝、同時還在 T 臺上展示這些服裝。這看起來可不是一個構造良好的或有效率的設計。

      現(xiàn)在,假設同樣的時裝秀采用 MVC 設計模式。這次不是一個人做每件事,而是將角色分開。時裝模特(不要與 MVC 縮寫中的模型混淆)展示服裝。他們扮演的角色是視圖。他們知道展示服裝(數(shù)據(jù)的)適當方法,但是根本不知道如何創(chuàng)建或設計服裝。另一方面,時裝設計師充當控制器。時裝設計師對于如何在 T 臺上走秀沒有概念,但他能創(chuàng)建和操縱服裝。時裝模特和設計師都能獨立地處理服裝,但都有自己的專業(yè)領域。

      這就是 MVC 設計模式背后的概念:讓 UI 的每個方面處理它擅長的工作。如果您仍然不明白,那么教程后面的示例有望消除您的迷惑 —— 但是在您繼續(xù)進行的時候,請記住基本的原則:用可視組件顯示數(shù)據(jù),同時讓其他類操縱數(shù)據(jù)。

      JComponent

       Swing 的整個可視組件庫的基礎構造塊是 JComponent。它是所有組件的父類。它是一個抽象類,所以不能創(chuàng)建 JComponent,但是作為類層次結構的結果,從字面意義來說它包含了數(shù)百個函數(shù),Swing 中的每個組件都可以使用這些函數(shù)。顯然,有些概念要比其他概念重要,所以對于本教程,需要學習的重要的東西是:

      • JComponent 不僅是 Swing 組件的基類,還是定制組件的基類(有關的更多信息在“中級 Swing”教程中)。

      • 它為所有組件提供了繪制的基礎架構 —— 一些方便進行組件定制的東西(同樣,在“中級 Swing”中,有關于這個主題的更多信息)。

      • 它知道如何處理所有的鍵盤按鍵。所以類只需要偵聽特定的鍵。

      • 它包含 add() 方法,可以添加其他 JComponent。換種方式來看,可以把任意 Swing 組件添加到其他任何 Swing 組件,從而構造嵌套組件(例如,JPanel 包含 JButton,甚至包含一些古怪的組合,例如 JMenu 包含 JButton)。

      簡單的Swing小部件

      JLabel

       Swing 庫中最基礎的組件是 JLabel。它所做的正是您所期望的:呆在那兒,看起來很漂亮,描述其他組件。下圖顯示了的 JLabel 實際應用:

      JLabel

      不太吸引人,但是仍然有用。實際上,在整個應用程序中,不僅把 JLabel 用作文本描述,還將它用作圖片描述。每當在 Swing 應用程序中看到圖片的時候,它就有可能是 JLabel。JLabel 對于 Swing 初學者來說沒有許多意料之外的方法?;镜姆椒òㄔO置文本、圖片、對齊以及標簽描述的其他組件:

      • get/setText()獲取/設置標簽的文本。

      • get/setIcon()獲取/設置標簽的圖片。

      • get/setHorizontalAlignment()獲取/設置文本的水平位置。

      • get/setVerticalAlignment()獲取/設置文本的垂直位置。

      • get/setDisplayedMnemonic()獲取/設置標簽的訪問鍵(下劃線文字)。

      • get/setLabelFor()獲取/設置這個標簽附著的組件,所以當用戶按下 Alt+訪問鍵時,焦點轉(zhuǎn)移到指定的組件。

      JButton

       Swing 中的基本動作組件 JButton,是與每個窗口中都能看到的 OK 和 Cancel 一樣的按鈕;這些按鈕所做的正是您希望它們做的工作 —— 在單擊它們之后,將發(fā)生一些事情。到底會發(fā)生什么呢?您必須定義發(fā)生的內(nèi)容(請參閱 事件,以獲得更多信息)。一個 JButton 實例看起來如下所示:

      JButton 

      用來改變 JButton 屬性的方法與 JLabel 的方法類似(您可能發(fā)現(xiàn),在大多數(shù) Swing 組件中,這些屬性都類似)。它們控制文本、圖片和方向:

      • get/setText()獲取/設置按鈕的文本。
      • get/setIcon()獲取/設置按鈕的圖片。
      • get/setHorizontalAlignment()獲取/設置文本的水平位置。
      • get/setVerticalAlignment()獲取/設置文本的垂直位置。
      • get/setDisplayedMnenomic()獲取/設置訪問鍵(下劃線字符),與 Alt 按鈕組合時,造成按鈕單擊。

      除了這些方法,我還要介紹 JButton 包含的另外一組方法。這些方法利用了按鈕的所有不同狀態(tài)。狀態(tài)是對組件進行描述的一個屬性,通常采用真/假設置。在 JButton 中,可以包含以下可能狀態(tài):活動/不活動、選中/沒選中、鼠標經(jīng)過/鼠標離開、按下/沒按下,等等。另外,可以組合這些狀態(tài),例如按鈕可以在鼠標經(jīng)過的同時被選中?,F(xiàn)在您可能會問自己用這些狀態(tài)到底要做什么。作為示例,請看看您的瀏覽器上的后退按鈕。請注意在鼠標經(jīng)過它的時候,圖片是如何變化的,在按下該按鈕時,圖片又是如何變化的。這個按鈕利用了不同的狀態(tài)。每個狀態(tài)采用不同的圖片,這是提示用戶交互正在進行的一種普遍并且有效的方式。JButton 上的狀態(tài)方法是:

      • get/setDisabledIcon()
      • get/setDisabledSelectedIcon()
      • get/setIcon()
      • get/setPressedIcon()
      • get/setRolloverIcon()
      • get/setRolloverSelectedIcon()
      • get/setSelectedIcon()

      JTextField

       Swing 中的基本文本組件是 JTextField,它允許用戶在 UI 中輸入文本。我肯定您熟悉文本字段:要掌握本教程,則必須使用一個文本字段輸入用戶名和口令。您輸入文本、刪除文本、選中文本、把文字四處移動 —— Swing 替您負責所有這些工作。作為 UI 開發(fā)人員,利用 JJTextField 時,實際上并不需要做什么。

      在任何情況下,這是 JTextField 實際使用時看起來的樣子:

      JTextField 

      在處理 JTextField 時,只需要關注一個方法 —— 這應當是很明顯的,這個方法就是設置文本的方法: get/setText(),用于獲取/設置 JTextField 中的文本。

      JFrame

       迄今為止,我介紹了 Swing 的三個基本構造塊:標簽、按鈕和文本字段;但是現(xiàn)在需要個地方放它們,希望用戶知道如何處理它們。JFrame 類就是做這個的——它是一個容器,允許您把其他組件添加到它里面,把它們組織起來,并把它們呈現(xiàn)給用戶。它有許多其他好處,但是我認為先看看它的圖片最簡單:

      JFrame 

      JFrame 實際上不僅僅讓您把組件放入其中并呈現(xiàn)給用戶。比起它表面上的簡單性,它實際上是 Swing 包中最復雜的組件。為了最大程度地簡化組件,在獨立于操作系統(tǒng)的 Swing 組件與實際運行這些組件的操作系統(tǒng)之間,JFrame 起著橋梁的作用。JFrame 在本機操作系統(tǒng)中是以窗口的形式注冊的,這么做之后,就可以得到許多熟悉的操作系統(tǒng)窗口的特性:最小化/最大化、改變大小、移動。但是對于本教程的目標來說,把 JFrame 當作放置組件的調(diào)色板就足夠了。可以在 JFrame 上調(diào)用的一些修改屬性的方法是:

      • get/setTitle()獲取/設置幀的標題。
      • get/setState()獲取/設置幀的最小化、最大化等狀態(tài)。
      • is/setVisible()獲取/設置幀的可視狀態(tài),換句話說,是否在屏幕上顯示。
      • get/setLocation()獲取/設置幀在屏幕上應當出現(xiàn)的位置。
      • get/setSize()獲取/設置幀的大小。
      • add()將組件添加到幀中。

      簡單應用程序

       就像所有的“x 入門”教程一樣,本教程也包含必不可少的 HelloWorld 演示。但這個示例不僅對觀察 Swing 應用程序如何工作有用,還對確保設置正確很有用。一旦使這個簡單的應用程序能夠成功運行,那么之后的每個示例也將能夠運行。下圖顯示了完成后的示例:

      HelloWorld 示例 

      第一步是創(chuàng)建類。將組件放在 JFrame 上的 Swing 應用程序需要繼承 JFrame 類,如下所示:

      public class HelloWorld extends JFrame
                  

      這樣做之后,就得到上面描述的所有 JFrame 屬性,最重要的是操作系統(tǒng)對窗口的本機支持。下一步是把組件放在屏幕上。在這個示例中,使用了一個 null 布局。在教程的后面部分,您將學到更多關于布局和布局管理器的內(nèi)容。但對于這個示例,可以用數(shù)字表示 JFrame 上的像素位置:

      
                  public HelloWorld()
                  {
                  super();
                  this.setSize(300, 200);
                  this.getContentPane().setLayout(null);
                  this.add(getJLabel(), null);
                  this.add(getJTextField(), null);
                  this.add(getJButton(), null);
                  this.setTitle("HelloWorld");
                  }
                  private javax.swing.JLabel getJLabel() {
                  if(jLabel == null) {
                  jLabel = new javax.swing.JLabel();
                  jLabel.setBounds(34, 49, 53, 18);
                  jLabel.setText("Name:");
                  }
                  return jLabel;
                  }
                  private javax.swing.JTextField getJTextField() {
                  if(jTextField == null) {
                  jTextField = new javax.swing.JTextField();
                  jTextField.setBounds(96, 49, 160, 20);
                  }
                  return jTextField;
                  }
                  private javax.swing.JButton getJButton() {
                  if(jButton == null) {
                  jButton = new javax.swing.JButton();
                  jButton.setBounds(103, 110, 71, 27);
                  jButton.setText("OK");
                  }
                  return jButton;
                  }
                  

      現(xiàn)在組件都放在了 JFrame 上,并且需要在屏幕上顯示 JFrame,并讓應用程序可以運行。就像在所有的 Java 應用程序中一樣,必須添加一個 main 方法,才能讓 Swing 應用程序運行。在這個 main 方法中,只需要創(chuàng)建 HelloWorld 應用程序?qū)ο?,然后調(diào)用其 setVisible() 即可:

      
                  public static void main(String[] args)
                  {
                  HelloWorld w = new HelloWorld();
                  w.setVisible(true);
                  }
                  

      完成了!這就是創(chuàng)建應用程序的所有過程。

      附加的Swing小部件

      JComboBox

       在這一節(jié)中,我將介紹 Swing 庫中的其他全部組件、如何使用它們、它們看起來是什么樣的,等等,這部分內(nèi)容應當讓您更好地了解 Swing 為 UI 開發(fā)人員提供了什么。

      我們從 JComboBox 開始介紹。組合框與下拉選擇相似,區(qū)別在于使用組合框時用戶可以不從列表中選擇項目,還可以選擇一個(而且只有一個)項目。在某些版本的組合框中,還可以輸入自己的選擇。瀏覽器的地址欄就是一個示例:它是一個允許輸入自己選項的組合框。以下是 JComboBox 在 Swing 中看起來的樣子:

      JComboBox 

      JComboBox 的重要函數(shù)包括 JComboBox 包含的數(shù)據(jù)。需要有一種方法來設置 JComboBox 中的數(shù)據(jù)、修改數(shù)據(jù)、在用戶選擇時得到用戶的選擇。可以使用以下 JComboBox 方法:

      • addItem()添加一個項目到 JComboBox.
      • get/setSelectedIndex()獲取/設置 JComboBox 中選中項目的索引。
      • get/setSelectedItem()獲取/設置選中的對象。
      • removeAllItems()從 JComboBox 刪除所有對象。
      • remoteItem()從 JComboBox 刪除特定對象。

      JPasswordField

       JTextField 的一個細微變化是 JPasswordField,它允許您隱藏在文本字段區(qū)域中顯示的字符。畢竟,在您輸入口令的時候,如果每個人都能看到,那可沒什么好處?可能根本就不好,而且在私人數(shù)據(jù)如此脆弱的今天,您需要所有能夠得到的幫助。以下是 JPasswordField 在 Swing 中看起來的樣子:

      JPasswordField 

      JPasswordField 上額外的“安全性”方法對 JTextField 的行為做了輕微改變,所以不能閱讀文本:

      • get/setEchoChar()獲取/設置每次字符輸入時在 JPasswordField 中顯示的字符。在獲取口令時,不會返回“回聲”,而是返回實際的字符。

      • getText() 不應當 使用這個函數(shù),因為它會帶來可能的安全問題(String 會保存在內(nèi)存中,可能的堆棧轉(zhuǎn)儲會暴露口令)。

      • getPassword()這是從 JPasswordField 中獲得口令的恰當方法,因為它返回一個包含口令的 char[]。為了保證恰當?shù)陌踩裕瑪?shù)組應當被清為 0,以確保它不會保留在內(nèi)存中。

      JCheckBox/JRadioButton

       JCheckBox 和 JRadioButton 組件向用戶呈現(xiàn)選項,通常采用多選的格式。區(qū)別是什么?從實踐的角度來說,它們沒有那么不同。它們的行為方式相同。但是,在一般的 UI 實踐中,它們有細微差異:JRadioButton 通常組合在一起,向用戶呈現(xiàn)帶有必選答案的問題,而且這些答案具有強制性(這意味著問題只能有一個答案)。JRadioButton 的行為保證了這個用法。一旦選擇了JRadioButton,就不能取消對它的選擇,除非選擇了在同一組中的另外一個單選鈕。從效果上看,這就保證了選項的惟一和必選。JCheckBox 的不同在于,允許隨機地選擇/取消除選擇,并允許為問題選擇多個答案。

      這里是個示例。問題“您是男孩還是女孩!”有兩個惟一答案選項“男孩”或“女孩”。用戶必須選擇一個,不能同時選中。另一方面,問題“您的習慣是什么?”的答案有“跑步”、“睡覺”或“閱讀”,不應當只允許為此問題選擇一個答案,因為人們可能有不止一個習慣。

      把這些 JCheckBoxe 或 JRadioButton 捆綁成一組的類是 ButtonGroup 類。它允許把選項組織在一起(例如“男孩”和“女孩”),這樣,其中一個被選擇時,另外一個就自動取消選擇。

      以下是 JCheckBox 和 JRadioButton 在 Swing 中看起來的樣子:

      JCheckBox 和 JRadioButton 

      需要記住的重要的 ButtonGroup 方法是:

      • add()添加 JCheckBox 或 JRadioButton 到 ButtonGroup。
      • getElements()獲得 ButtonGroup 中的全部組件,允許對它們進行迭代,找到其中選中的那個。

      JMenu/JMenuItem/JMenuBar

       JMenu、JMenuItem 和 JMenuBar 組件是在 JFrame 中開發(fā)菜單系統(tǒng)的主要構造塊。任何菜單系統(tǒng)的基礎都是 JMenuBar。它平淡而乏味,但卻是必需的,因為每個 JMenu 和 JMenuItem 都要用它構建。要用 setJMenuBar() 方法把 JMenuBar 附著到 JFrame。一旦將它附加到 JFrame 中,就可以添加所有想要的菜單、子菜單和菜單項。

      JMenu/JMenuItem 的區(qū)別看起來可能很明顯,但實際上,在幕后看起來并不像表面那樣??纯搭惖念悓哟谓Y構,就知道JMenuJMenuItem 的子類。但是,在表面上,它們是有區(qū)別的:用 JMenu 包含其他 JMenuItem 和 JMenu;JMenuItem 在選中時觸發(fā)操作。

      JMenuItem 也支持快捷鍵的概念。與您用過的大多數(shù)應用程序一樣,Swing 應用程序允許您按下 Ctrl+(某個鍵)來觸發(fā)一個操作,就像選中菜單鍵本身一樣。想想用來剪切和粘貼的快捷鍵 Ctrl+X 和 Ctrl+V。

      除此之外,JMenu 和 JMenuItem 都支持訪問鍵。用 Alt 鍵與某個字母關聯(lián),模擬菜單本身的選擇(例如,在 Windows 中按下 Alt+F,然后按下 Alt+x 就可以關閉應用程序)。

      以下是包含 JMenu 和 JMenuItem 的 JMenuBar 在 Swing 中的樣子:

      JMenuBar、JMenu 和 JMenuItem 

      這些類需要的重要方法是:

      • JMenuItem and JMenu:
        • get/setAccelerator()獲取/設置用作快捷鍵的 Ctrl+鍵。
        • get/setText()獲取/設置菜單的文本。
        • get/setIcon()獲取/設置菜單使用的圖片。


      • JMenu 專用:
        • add()添加另外一個 JMenu 或 JMenuItem 到 JMenu(創(chuàng)建嵌套菜單)。

      JSlider

       在應用程序中 JSlider 支持數(shù)值變化。它是一種迅速而簡單的方式,不僅能讓用戶以可視形式獲得他們當前選擇的反饋,還能得到可以接受的值的范圍。想像一下這種情況:可以提供一個文本字段,允許用戶輸入值,但是這樣做就帶來了額外的麻煩,要確保輸入的值是數(shù)字,還要確保數(shù)字符合要求的數(shù)值范圍。例如,如果有一個金融 Web 站點,它向您提問要在股票上投資的百分比,那么您不得不檢查在文本字段中輸入的值,以確保它們是數(shù)字,而且在 0 到 100 之間。如果換用 JSlider,那么就可以確保選擇的是指定范圍內(nèi)的數(shù)字。

      在 Swing 中,JSlider 看起來如下所示:

      JSlider 

      JSlider 中的重要方法是:

      • get/setMinimum()獲取/設置可以選擇的最小值。
      • get/setMaximum()獲取/設置可以選擇的最大值。
      • get/setOrientation()獲取/設置 JSlider 是上/下還是左/右滾動條。
      • get/setValue()獲取/設置 JSlider 的初始值。

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多