日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Swing

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

開始之前

關(guān)于本教程

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

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

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

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

工具和源代碼下載

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

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

關(guān)于作者

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

Swing簡(jiǎn)介

UI 組件簡(jiǎn)介

 在開始學(xué)習(xí) Swing 之前,必須回答針對(duì)真正初學(xué)者的一個(gè)問題:什么是 UI?初學(xué)者的答案是“用戶界面”。但是因?yàn)楸窘坛痰哪繕?biāo)是要保證您不再只是個(gè)初學(xué)者,所以我們需要比這個(gè)定義更高級(jí)的定義。

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

Swing 的角色

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

  • 鍵盤:Swing 提供了捕捉用戶輸入的方法。
  • 顏色:Swing 提供改變?cè)谄聊簧峡吹降念伾姆椒ā?
  • 打字的地址欄:Swing 提供了文本組件,處理所有普通任務(wù)。
  • 音量:Swing 不太擅長(zhǎng)。

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

MVC

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

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

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

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

JComponent

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

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

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

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

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

簡(jiǎn)單的Swing小部件

JLabel

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

JLabel

不太吸引人,但是仍然有用。實(shí)際上,在整個(gè)應(yīng)用程序中,不僅把 JLabel 用作文本描述,還將它用作圖片描述。每當(dāng)在 Swing 應(yīng)用程序中看到圖片的時(shí)候,它就有可能是 JLabel。JLabel 對(duì)于 Swing 初學(xué)者來說沒有許多意料之外的方法。基本的方法包括設(shè)置文本、圖片、對(duì)齊以及標(biāo)簽描述的其他組件:

  • get/setText()獲取/設(shè)置標(biāo)簽的文本。

  • get/setIcon()獲取/設(shè)置標(biāo)簽的圖片。

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

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

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

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

JButton

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

JButton 

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

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

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

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

JTextField

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

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

JTextField 

在處理 JTextField 時(shí),只需要關(guān)注一個(gè)方法 —— 這應(yīng)當(dāng)是很明顯的,這個(gè)方法就是設(shè)置文本的方法: get/setText(),用于獲取/設(shè)置 JTextField 中的文本。

JFrame

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

JFrame 

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

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

簡(jiǎn)單應(yīng)用程序

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

HelloWorld 示例 

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

public class HelloWorld extends JFrame
            

這樣做之后,就得到上面描述的所有 JFrame 屬性,最重要的是操作系統(tǒng)對(duì)窗口的本機(jī)支持。下一步是把組件放在屏幕上。在這個(gè)示例中,使用了一個(gè) null 布局。在教程的后面部分,您將學(xué)到更多關(guān)于布局和布局管理器的內(nèi)容。但對(duì)于這個(gè)示例,可以用數(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,并讓應(yīng)用程序可以運(yùn)行。就像在所有的 Java 應(yīng)用程序中一樣,必須添加一個(gè) main 方法,才能讓 Swing 應(yīng)用程序運(yùn)行。在這個(gè) main 方法中,只需要?jiǎng)?chuàng)建 HelloWorld 應(yīng)用程序?qū)ο螅缓笳{(diào)用其 setVisible() 即可:


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

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

附加的Swing小部件

JComboBox

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

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

JComboBox 

JComboBox 的重要函數(shù)包括 JComboBox 包含的數(shù)據(jù)。需要有一種方法來設(shè)置 JComboBox 中的數(shù)據(jù)、修改數(shù)據(jù)、在用戶選擇時(shí)得到用戶的選擇??梢允褂靡韵?JComboBox 方法:

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

JPasswordField

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

JPasswordField 

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

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

  • getText() 不應(yīng)當(dāng) 使用這個(gè)函數(shù),因?yàn)樗鼤?huì)帶來可能的安全問題(String 會(huì)保存在內(nèi)存中,可能的堆棧轉(zhuǎn)儲(chǔ)會(huì)暴露口令)。

  • getPassword()這是從 JPasswordField 中獲得口令的恰當(dāng)方法,因?yàn)樗祷匾粋€(gè)包含口令的 char[]。為了保證恰當(dāng)?shù)陌踩?,?shù)組應(yīng)當(dāng)被清為 0,以確保它不會(huì)保留在內(nèi)存中。

JCheckBox/JRadioButton

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

這里是個(gè)示例。問題“您是男孩還是女孩!”有兩個(gè)惟一答案選項(xiàng)“男孩”或“女孩”。用戶必須選擇一個(gè),不能同時(shí)選中。另一方面,問題“您的習(xí)慣是什么?”的答案有“跑步”、“睡覺”或“閱讀”,不應(yīng)當(dāng)只允許為此問題選擇一個(gè)答案,因?yàn)槿藗兛赡苡胁恢挂粋€(gè)習(xí)慣。

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

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

JCheckBox 和 JRadioButton 

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

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

JMenu/JMenuItem/JMenuBar

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

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

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

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

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

JMenuBar、JMenu 和 JMenuItem 

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

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


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

JSlider

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

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

JSlider 

JSlider 中的重要方法是:

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

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多