国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JAVA教程 第七講 Swing用戶界面設(shè)計(jì)(一)

瀏覽:4日期:2024-03-05 17:58:00

7.1 Swing簡(jiǎn)介

7.1.1 簡(jiǎn)介

第五講中我們學(xué)習(xí)了AWT,AWT是Swing的基礎(chǔ)。Swing的產(chǎn)生主要原因就是AWT不能滿足圖形化用戶界面發(fā)展的需要。

AWT設(shè)計(jì)的初衷是支持開(kāi)發(fā)小應(yīng)用程序的簡(jiǎn)單用戶界面。例如AWT缺少剪貼板、打印支持、鍵盤(pán)導(dǎo)航等特性,而且原來(lái)的AWT甚至不包括彈出式菜單或滾動(dòng)窗格等基本元素。

此外AWT還存在著嚴(yán)重的缺陷,人們使AWT適應(yīng)基于繼承的、具有很大伸縮性的事件模型,基于同位體的體系結(jié)構(gòu)也成為其致命的弱點(diǎn)。

隨著發(fā)展的需要,Swing出現(xiàn)了,Swing組件幾乎都是輕量組件,與重量組件相比,沒(méi)有本地的對(duì)等組件,不像重量組件要在它們自己的本地不透明窗體中繪制,輕量組件在它們的重量組件的窗口中繪制。

這一講我們講一下基本的Swing組件使用方法和使用Swing組件創(chuàng)建用戶界面的初步方法。

Swing是由100%純Java實(shí)現(xiàn)的,Swing組件是用Java實(shí)現(xiàn)的輕量級(jí)( light-weight)組件,沒(méi)有本地代碼,不依賴操作系統(tǒng)的支持,這是它與AWT組件的最大區(qū)別。由于AWT組件通過(guò)與具體平臺(tái)相關(guān)的對(duì)等類(Peer)實(shí)現(xiàn),因此Swing比AWT組件具有更強(qiáng)的實(shí)用性。Swing在不同的平臺(tái)上表現(xiàn)一致,并且有能力提供本地窗口系統(tǒng)不支持的其它特性。

Swing采用了一種MVC的設(shè)計(jì)范式,即'模型-視圖-控制'(Model-View-Controller),其中模型用來(lái)保存內(nèi)容,視圖用來(lái)顯示內(nèi)容,控制器用來(lái)控制用戶輸入。

Swing外觀感覺(jué)采用可插入的外觀感覺(jué)(Pluggable Look and Feel,PL&F)

在AWT組件中,由于控制組件外觀的對(duì)等類與具體平臺(tái)相關(guān),使得AWT組件總是只有與本機(jī)相關(guān)的外觀。Swing使得程序在一個(gè)平臺(tái)上運(yùn)行時(shí)能夠有不同的外觀。用戶可以選擇自己習(xí)慣的外觀。以下三幅圖是在同一個(gè)操作系統(tǒng)下得到不同的外觀。

7.1.2 Swing的類層次結(jié)構(gòu)

在javax.swing包中,定義了兩種類型的組件:頂層容器(JFrame,JApplet,JDialog和JWindow)和輕量級(jí)組件。Swing組件都是AWT的Container類的直接子類和間接子類。

java.awt.Component

-java.awt.Container

 -java.awt.Window

-java.awt.Frame-javax.swing.JFrame

-javax.Dialog-javax.swing.JDialog

-javax.swing.JWindow

 -java.awt.Applet-javax.swing.JApplet

 -javax.swing.Box

 -javax.swing.Jcomponet

(在jdk1.3中,第一、第二和pending包沒(méi)有了,增加了plaf.multi包,主要功能:給缺省的L&F加上附加的L&F,例如一個(gè)MultiButtonUI實(shí)例可以同時(shí)處理MotifButtonUI和AudioButtonUI.)

swing包是Swing提供的最大包,它包含將近100個(gè)類和25個(gè)接口,幾乎所有的Swing組件都在swing包中,只有JtableHeader和 JtextComponent是例外,它們分別在swing.table和swing.text中。

swing.border包中定義了事件和事件監(jiān)聽(tīng)器類,與AWT的event包類似。它們都包括事件類和監(jiān)聽(tīng)器接口。

swing.pending包包含了沒(méi)有完全實(shí)現(xiàn)的Swing組件。

swing.table包中主要包括了表格組建(JTable)的支持類。

swing.tree同樣是JTree的支持類。

swing.text、swing.text.html、swing.text.html.parser和swing.text.rtf都是用于顯示和編輯文檔的包。

7.1.3 Swing組件的多樣化

Swing是AWT的擴(kuò)展,它提供了許多新的圖形界面組件。Swing組件以'J'開(kāi)頭,除了有與AWT類似的按鈕(JButton)、標(biāo)簽(JLabel)、復(fù)選框(JCheckBox)、菜單(JMenu)等基本組件外,還增加了一個(gè)豐富的高層組件集合,如表格(JTable)、樹(shù)(JTree)。

7.1.4 MVC(Model-View-Control)體系結(jié)構(gòu)

Swing勝過(guò)AWT的主要優(yōu)勢(shì)在于MVC體系結(jié)構(gòu)的普遍使用。在一個(gè)MVC用戶界面中,存三個(gè)通訊對(duì)象:模型、視圖和控件。模型是指定的邏輯表示法,視圖是模型的可視化表示法,而控件則指定了如何處理用戶輸入。當(dāng)模型發(fā)生改變時(shí),它會(huì)通知所有依賴它的視圖,視圖使用控件指定其相應(yīng)機(jī)制。

為了簡(jiǎn)化組件的設(shè)計(jì)工作,在Swing組件中視圖和控件兩部分合為一體。每個(gè)組件有一個(gè)相關(guān)的分離模型和它使用的界面(包括視圖和控件)。比如,按鈕JButton有一個(gè)存儲(chǔ)其狀態(tài)的分離模型ButtonModel對(duì)象。組件的模型是自動(dòng)設(shè)置的,例如一般都使用JButton 而不是使用ButtonModel 對(duì)象。另外,通過(guò)Model類的子類或通過(guò)實(shí)現(xiàn)適當(dāng)?shù)慕涌冢梢詾榻M件建立自己的模型。把數(shù)據(jù)模型與組件聯(lián)系起來(lái)用setModel( )方法。

MVC是現(xiàn)有的編程語(yǔ)言中制作圖形用戶界面的一種通用的思想,其思路是把數(shù)據(jù)的內(nèi)容本身和顯示方式分離開(kāi),這樣就使得數(shù)據(jù)的顯示更加靈活多樣。比如,某年級(jí)各個(gè)班級(jí)的學(xué)生人數(shù)是數(shù)據(jù),則顯示方式是多種多樣的,可以采用柱狀圖顯示,也可以采用餅圖顯示,也可以采用直接的數(shù)據(jù)輸出。因此在設(shè)計(jì)的時(shí)候,就考慮把數(shù)據(jù)和顯示方式分開(kāi),對(duì)于實(shí)現(xiàn)多種多樣的顯示是非常有幫助的。

7.1.5 可存取性支持

所有Swing組件都實(shí)現(xiàn)了Accessible接口,提供對(duì)可存取性的支持,使得輔助功能如屏幕閱讀器能夠十分方便的從Swing組件中得到信息。

7.1.6 支持鍵盤(pán)操作

在Swing組件中,使用JComponent類的registerKeyboardAction()方法,能使用戶通過(guò)鍵盤(pán)操作來(lái)替代鼠標(biāo)驅(qū)動(dòng)GUI上Swing組件的相應(yīng)動(dòng)作。有些類還為鍵盤(pán)操作提供了更便利的方法。

其實(shí)這就相當(dāng)于熱鍵,使得用戶可以只用鍵盤(pán)進(jìn)行操作。

7.1.7 設(shè)置邊框

對(duì)Swing組件可以設(shè)置一個(gè)和多個(gè)邊框。Swing中提供了各式各樣的邊框供用戶選用,也能建立組合邊框或自己設(shè)計(jì)邊框。一種空白邊框可以增大組件,協(xié)助布局管理器對(duì)容器中的組件進(jìn)行合理的布局。

7.1.8 使用圖標(biāo)(Icon)

與AWT的部件不同,許多Swing組件如按鈕、標(biāo)簽,除了使用文字外,還可以使用圖標(biāo)修飾自己。

例7.1:

import javax.swing.*; //引入Swing包名

 //import com.sun.java.swing.*;

 //使用JDK 1.2 Beta 4版和所有Swing 1.1 Beta 3

 //之前的版本,引入Swing包名用此方法。

import java.awt.*;

import java.awt.event.*;

public class SwingApplication {

private static String labelPrefix = 'Number of button clicks: ';

private int numClicks = 0; //計(jì)數(shù)器,計(jì)算點(diǎn)擊次數(shù)

public Component createComponents() {

final JLabel label = new JLabel(labelPrefix + '0 ');

JButton button = new JButton('I'm a Swing button!');

button.setMnemonic(KeyEvent.VK_I); //設(shè)置按鈕的熱鍵為'I'

button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

numClicks++;

label.setText(labelPrefix + numClicks);

 //顯示按鈕被點(diǎn)擊的次數(shù)

}

});

label.setLabelFor(button);

/* 在頂層容器及其內(nèi)容之間放置空間的常用辦法是把內(nèi)容添加到Jpanel上,而Jpanel本身沒(méi)有邊框的。*/

JPanel pane = new JPanel();

pane.setBorder(BorderFactory.createEmptyBorder(

30, //top

30, //left

10, //bottom

30) //right

);

 pane.setLayout(new GridLayout(0, 1)); //單列多行

 pane.add(button);

 pane.add(label);

 return pane;

}

public static void main(String[] args) {

 try {

 UIManager.setLookAndFeel(

 UIManager.getCrossPlatformLookAndFeelClassName());

//設(shè)置窗口風(fēng)格

 } catch (Exception e) { }

 //創(chuàng)建頂層容器并添加內(nèi)容.

 JFrame frame = new JFrame('SwingApplication');

 SwingApplication app = new SwingApplication();

 Component contents = app.createComponents();

 frame.getContentPane().add(contents, BorderLayout.CENTER);

 //窗口設(shè)置結(jié)束,開(kāi)始顯示

 frame.addWindowListener(new WindowAdapter() {

//匿名類用于注冊(cè)監(jiān)聽(tīng)器

 public void windowClosing(WindowEvent e) {

 System.exit(0);

 }

 });

 frame.pack();

 frame.setVisible(true);

 }

}

7.1.9 Swing程序結(jié)構(gòu)簡(jiǎn)介

Swing的程序設(shè)計(jì)一般可按照下列流程進(jìn)行:

1. 引入Swing包

2. 選擇'外觀和感覺(jué)'

3. 設(shè)置頂層容器

4. 設(shè)置按鈕和標(biāo)簽

5. 向容器中添加組件

6. 在組件周圍添加邊界

7. 進(jìn)行事件處理

例子7.1說(shuō)明了Swing中程序設(shè)計(jì)的結(jié)構(gòu)以及最基本的組件Button和Label的用法。在程序中,我們建立一個(gè)Swing風(fēng)格的窗口,并在其中添加一個(gè)按鈕,程序中保存一個(gè)計(jì)數(shù)器以計(jì)算按鈕被點(diǎn)擊的次數(shù),并在每一次點(diǎn)擊之后用一個(gè)Label顯示。在這個(gè)程序中我們可以看到Swing組件的使用與AWT組件的使用基本方法一致,使用的事件處理機(jī)制也完全相同。這些在前面的AWT中已經(jīng)講過(guò),不再贅述。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产精品一区二区久久精品涩爱 | 亚洲欧美日本国产综合在线 | 麻豆视频国产 | 欧美成人久久 | 精品国产欧美另类一区 | 国产91亚洲精品 | 国产色在线播放 | 色偷偷亚洲精品一区 | 久久精品国产大片免费观看 | 国产成人无精品久久久久国语 | 日本久久久久久 | 5级做人爱c视版免费视频 | 欧美视频xxxxx| 国产真实搭讪系列 | 日韩精品一区二区三区不卡 | 狠狠色综合网站久久久久久久 | 亚洲国产天堂久久九九九 | 欧美精品成人3d在线 | 亚洲精品成人一区 | 碰碰碰免费公开在线视频 | 久久久久久久性高清毛片 | 久久久黄色大片 | 欧美变态一级毛片 | 99精品视频在线观看免费 | 欧美aaaaa| 国产黄色免费网站 | 中国国产一国产一级毛片视频 | 亚洲国产精品大秀在线播放 | www.久久视频 | 欧美一级专区免费大片俄罗斯 | 一级一级 a爱片免费视频 | 日韩色道 | 亚洲日韩视频 | 国产特黄特色的大片观看免费视频 | 国产成人免费 | 亚洲图片 自拍偷拍 | 亚洲成色在线 | 久草资源在线播放 | 一级黄色录像片 | 亚洲黄色第一页 | 鲁大师成人精品视频 |