成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

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

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

7.1 Swing簡介

7.1.1 簡介

第五講中我們學習了AWT,AWT是Swing的基礎。Swing的產生主要原因就是AWT不能滿足圖形化用戶界面發展的需要。

AWT設計的初衷是支持開發小應用程序的簡單用戶界面。例如AWT缺少剪貼板、打印支持、鍵盤導航等特性,而且原來的AWT甚至不包括彈出式菜單或滾動窗格等基本元素。

此外AWT還存在著嚴重的缺陷,人們使AWT適應基于繼承的、具有很大伸縮性的事件模型,基于同位體的體系結構也成為其致命的弱點。

隨著發展的需要,Swing出現了,Swing組件幾乎都是輕量組件,與重量組件相比,沒有本地的對等組件,不像重量組件要在它們自己的本地不透明窗體中繪制,輕量組件在它們的重量組件的窗口中繪制。

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

Swing是由100%純Java實現的,Swing組件是用Java實現的輕量級( light-weight)組件,沒有本地代碼,不依賴操作系統的支持,這是它與AWT組件的最大區別。由于AWT組件通過與具體平臺相關的對等類(Peer)實現,因此Swing比AWT組件具有更強的實用性。Swing在不同的平臺上表現一致,并且有能力提供本地窗口系統不支持的其它特性。

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

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

在AWT組件中,由于控制組件外觀的對等類與具體平臺相關,使得AWT組件總是只有與本機相關的外觀。Swing使得程序在一個平臺上運行時能夠有不同的外觀。用戶可以選擇自己習慣的外觀。以下三幅圖是在同一個操作系統下得到不同的外觀。

7.1.2 Swing的類層次結構

在javax.swing包中,定義了兩種類型的組件:頂層容器(JFrame,JApplet,JDialog和JWindow)和輕量級組件。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包沒有了,增加了plaf.multi包,主要功能:給缺省的L&F加上附加的L&F,例如一個MultiButtonUI實例可以同時處理MotifButtonUI和AudioButtonUI.)

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

swing.border包中定義了事件和事件監聽器類,與AWT的event包類似。它們都包括事件類和監聽器接口。

swing.pending包包含了沒有完全實現的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的擴展,它提供了許多新的圖形界面組件。Swing組件以'J'開頭,除了有與AWT類似的按鈕(JButton)、標簽(JLabel)、復選框(JCheckBox)、菜單(JMenu)等基本組件外,還增加了一個豐富的高層組件集合,如表格(JTable)、樹(JTree)。

7.1.4 MVC(Model-View-Control)體系結構

Swing勝過AWT的主要優勢在于MVC體系結構的普遍使用。在一個MVC用戶界面中,存三個通訊對象:模型、視圖和控件。模型是指定的邏輯表示法,視圖是模型的可視化表示法,而控件則指定了如何處理用戶輸入。當模型發生改變時,它會通知所有依賴它的視圖,視圖使用控件指定其相應機制。

為了簡化組件的設計工作,在Swing組件中視圖和控件兩部分合為一體。每個組件有一個相關的分離模型和它使用的界面(包括視圖和控件)。比如,按鈕JButton有一個存儲其狀態的分離模型ButtonModel對象。組件的模型是自動設置的,例如一般都使用JButton 而不是使用ButtonModel 對象。另外,通過Model類的子類或通過實現適當的接口,可以為組件建立自己的模型。把數據模型與組件聯系起來用setModel( )方法。

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

7.1.5 可存取性支持

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

7.1.6 支持鍵盤操作

在Swing組件中,使用JComponent類的registerKeyboardAction()方法,能使用戶通過鍵盤操作來替代鼠標驅動GUI上Swing組件的相應動作。有些類還為鍵盤操作提供了更便利的方法。

其實這就相當于熱鍵,使得用戶可以只用鍵盤進行操作。

7.1.7 設置邊框

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

7.1.8 使用圖標(Icon)

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

例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; //計數器,計算點擊次數

public Component createComponents() {

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

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

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

button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

numClicks++;

label.setText(labelPrefix + numClicks);

 //顯示按鈕被點擊的次數

}

});

label.setLabelFor(button);

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

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());

//設置窗口風格

 } catch (Exception e) { }

 //創建頂層容器并添加內容.

 JFrame frame = new JFrame('SwingApplication');

 SwingApplication app = new SwingApplication();

 Component contents = app.createComponents();

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

 //窗口設置結束,開始顯示

 frame.addWindowListener(new WindowAdapter() {

//匿名類用于注冊監聽器

 public void windowClosing(WindowEvent e) {

 System.exit(0);

 }

 });

 frame.pack();

 frame.setVisible(true);

 }

}

7.1.9 Swing程序結構簡介

Swing的程序設計一般可按照下列流程進行:

1. 引入Swing包

2. 選擇'外觀和感覺'

3. 設置頂層容器

4. 設置按鈕和標簽

5. 向容器中添加組件

6. 在組件周圍添加邊界

7. 進行事件處理

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

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
男女男精品网站| 国产清纯白嫩初高生在线观看91 | 国产精品美女久久久久久| 蜜桃av噜噜一区| 亚洲欧美久久| 国产精品欧美一级免费| av资源站一区| 欧美一区二区三区在线视频| 另类小说一区二区三区| 老鸭窝毛片一区二区三区 | 6080日韩午夜伦伦午夜伦| 青青草成人在线观看| 亚洲一卡久久| 成人欧美一区二区三区视频网页 | 亚洲免费在线看| 欧美fxxxxxx另类| 欧美第一区第二区| 国产精品1区2区3区| 欧美日韩国产欧美日美国产精品| 天涯成人国产亚洲精品一区av| 日韩午夜精品| 国产精品国产三级国产三级人妇| 亚洲欧美影院| 久久久精品人体av艺术| 91玉足脚交白嫩脚丫在线播放| 欧美成人video| 福利电影一区二区三区| 欧美一卡二卡在线| 国产不卡免费视频| 欧美大片一区二区三区| 国产福利一区二区三区| 91精品国产免费久久综合| 久久精品国产99国产| 91久久奴性调教| 日韩精品1区2区3区| 免播放器亚洲| 亚洲精品免费在线播放| 国产欧美亚洲日本| 夜夜操天天操亚洲| 先锋影音一区二区三区| 亚洲成年人影院| 色婷婷精品久久二区二区蜜臂av| 日韩精品一级中文字幕精品视频免费观看| 国产精品视频| 亚洲国产美国国产综合一区二区| 亚洲专区一区| 日韩va欧美va亚洲va久久| 日本久久电影网| 蜜臀va亚洲va欧美va天堂 | 亚洲一区二区三区四区的 | 成人av在线资源| 国产午夜精品一区二区三区嫩草 | 亚洲成人黄色小说| 性久久久久久| 日韩高清在线电影| 欧美日韩一卡二卡| 岛国av在线一区| 国产午夜亚洲精品不卡| 国产精品videosex极品| 亚洲三级电影网站| 午夜在线精品偷拍| 老司机一区二区| 欧美一区二区免费观在线| av一区二区久久| 国产精品福利一区二区三区| 亚洲国产三级| 日韩影院在线观看| 欧美一级片免费看| 91在线观看污| 日韩一区有码在线| 每日更新成人在线视频| 久久99精品久久久久| 日韩一区国产二区欧美三区| 成人a区在线观看| 欧美激情一区三区| 亚洲伦理一区| 蜜桃av一区二区在线观看| 欧美大白屁股肥臀xxxxxx| 欧美国产视频在线观看| 亚洲一区二区三区四区的| 欧美无人高清视频在线观看| 国产福利91精品一区| 国产三级精品视频| 国产精品美女久久久| 精品影视av免费| 久久久久9999亚洲精品| 国产精品久久久久久久久婷婷| 麻豆视频观看网址久久| 日韩一区二区视频在线观看| 成人ar影院免费观看视频| 成人欧美一区二区三区小说 | 亚洲国产精品成人久久综合一区| 国产视频一区在线观看一区免费| 秋霞成人午夜伦在线观看| 欧美精品一区视频| 国产精品日韩久久久| 国产乱码精品一区二区三区忘忧草 | 国产精品一区二区在线观看网站 | 一本大道综合伊人精品热热| 国产成人自拍网| 国产精品伦一区| 老司机久久99久久精品播放免费| 成人综合在线观看| 亚洲影院久久精品| 日韩视频免费观看高清完整版在线观看 | 制服丝袜亚洲精品中文字幕| 欧美成人一区二免费视频软件| 亚洲va欧美va国产va天堂影院| 精品国产伦一区二区三区免费| 国产农村妇女精品一区二区| 风间由美性色一区二区三区| 亚洲激情图片一区| 在线不卡免费av| 99在线热播精品免费99热| 国产高清无密码一区二区三区| 国产精品无圣光一区二区| 欧美日韩国产影片| 欧美午夜欧美| 韩国女主播一区二区三区| 国产精品家庭影院| 欧美精品久久99| 99热免费精品在线观看| 成人夜色视频网站在线观看| 亚洲综合在线电影| 精品久久久久av影院| 久久黄色网页| 欧美日本不卡高清| 国产原创一区二区| 亚洲无人区一区| 久久精品夜色噜噜亚洲a∨| 欧美亚洲自拍偷拍| 亚洲日本视频| av不卡在线观看| 久久国产精品第一页| 亚洲精品日韩一| 精品国产乱码久久久久久夜甘婷婷| 国产伦精品一区二区三区视频黑人| a级高清视频欧美日韩| 久久国产视频网| 一区二区三区美女| 国产欧美一区二区三区在线老狼| 欧美精选一区二区| 久久精品官网| 亚洲国产免费| 91麻豆123| 国产精品夜夜嗨| 久久精品国产在热久久| 亚洲综合色在线| 国产精品网站导航| 精品久久国产字幕高潮| 在线观看视频91| 日韩午夜视频在线观看| 91社区在线播放| 国产精品小仙女| 麻豆专区一区二区三区四区五区| 午夜欧美视频在线观看| 亚洲欧美激情在线| 国产欧美精品在线观看| 日韩一级片网址| 欧美影视一区二区三区| 国产美女在线精品免费观看| 亚洲福利av| 国内一区二区在线视频观看| 99国产精品久久久久| 国产99久久精品| 国产毛片精品视频| 麻豆91在线观看| 丝袜亚洲精品中文字幕一区| 亚洲自拍欧美精品| 亚洲三级久久久| 中文字幕一区在线| 欧美激情艳妇裸体舞| 久久久久久久综合狠狠综合| 欧美成人欧美edvon| 91麻豆精品91久久久久同性| 欧美性生活一区| 在线视频欧美区| 91精品办公室少妇高潮对白| 久久激情视频| 久久亚洲精品伦理| 色综合久久久久综合| 国产色综合网| 免费久久99精品国产自在现线 | 欧美精品亚洲一区二区在线播放| 91久久精品网| 欧美在线视频你懂得| 91久久久免费一区二区| 在线视频中文字幕一区二区| 在线观看国产日韩| 色www精品视频在线观看| 色偷偷成人一区二区三区91 | www.欧美.com| 成人高清免费在线播放| 99re6这里只有精品视频在线观看| eeuss鲁片一区二区三区在线观看| 岛国精品在线播放| 91在线免费播放| 欧美精品播放| 黄色精品免费| 亚洲伦伦在线|