六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

JAVA圖文說明教程 第7講 Swing用戶界面設計(一)

[摘要]7.1 Swing簡介   7.1.1 簡介   第五講中我們學習了AWT,AWT是Swing的基礎。Swing的產生主要原因就是AWT不能滿足圖形化用戶界面發展的需要。   AWT設計的初衷是支持開發小應用程序的簡單用戶界面。例如AWT缺少剪貼板、打印支持、鍵盤導航等特性,而且原來的AWT甚至不...
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中已經講過,不再贅述。



主站蜘蛛池模板: 日韩精品欧美国产精品亚 | 特别黄的免费视频大片 | 五月开心综合 | 欧美一级性生活视频 | 中文在线最新版天堂8 | 午夜影院在线观看 | 欧美亚洲国产成人不卡 | 亚洲va久久久噜噜噜久久 | 视频一区二区精品的福利 | 日韩毛片| 欧洲成品大片在线播放 | 亚洲人成在线观看男人自拍 | 日韩中文字幕一区 | 日本在线观看视频网站 | 亚洲六区| 婷婷在线视频观看 | 日韩国产欧美视频 | 亚洲经典在线观看 | 日本性在线 | 香蕉视频日本 | 四虎在线精品 | 日本免费观看视频 | 欧美在线一二三 | 日本欧美久久久久免费播放网 | 中文字幕网资源站永久资源 | 五月婷六月| 天天爱天天做天天干 | 亚洲国产天堂久久综合226 | 亚洲国产成人久久99精品 | 色综合天天综合中文网 | 天天爱天天舔 | 青青青爽线在线视频观看 | 手机看片自拍日韩日韩高清 | 色综合久久网 | 亚洲一区精品在线 | 青青青爽国产在线视频 | 日本成人在线看 | 天堂网avtt | 青草影院在线观看免费版 | 欧美一级片网 | 亚洲欧美日本韩国综合在线观看 |