久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

JR - 精品文章 - JAVASWING學(xué)習(xí)筆記(清華大學(xué))

 高山流水 2006-02-10
 


 ++ Swing讀書筆記
 1-1:Swing常用的package
            PACHAGE  |             
         內(nèi)          容
          
 -----------------|-------------------------------
           javax.swing                      |         
 最常用的pachage,,包含了各種swing組件的類
           javax.swing.border               |         
 包含與swing組件外框有關(guān)的類
           javax..swing.colorchooser        |         
 針對swing調(diào)色盤組件(JColorChooser)所設(shè)計的類
           javax.swing.event                |         
 處理由swing組件產(chǎn)生的事件,,有別于AWT事件
           javax.swing.filechooser          |         
 包含針對swing文件選擇對話框(JFileChooser)所設(shè)計的類
          ----------------------------------------------
           javax.swing.plaf                 |         
 處理swing組件外觀的相關(guān)類
           javax.swing.plaf.basic           |         
           javax.swing.plaf.metal           |         
           javax.swing.plaf.multi           |  
           ---------------------------------------------- 
       
           javax.swing.table                |         
 針對swing表格組件(JTable)所設(shè)計的類
           ----------------------------------------------
           javax.swing.text                 |         
 包含與swing文字組件相關(guān)的類
           javax.swing.text.html            |
           javax.swing.text.html.parser     |
           javax.swing.text.rtf             |
           ----------------------------------------------
           javax.swing.tree                 |         
 針對swing樹關(guān)元件(JTree)所設(shè)計的類
           javax.swing.undo                 |         
 提供swing文字組件Redo或Undo的功能
 1-2:swing的版面結(jié)構(gòu)
   Swing中幾乎所有組件都是從JComponent衍生而來,,也就是說這些組件都是lightweight 
 Component,均由純java code所編寫面成
 、Swing中以下幾個組件不是由JComponent繼承面來:
    JFrame(JRoot Pane)
    JDialog(JRoot Pane)
    JWindow(JRoot Pane)
    JApplet(JRoot Pane)
  以上四個組件是heavyweight Component,必須使用到native 
 code來畫出這四個窗口組件,,因為要在操作系統(tǒng)中顯示窗口畫面,必
 須使用操作系統(tǒng)的宣傳品資源,,面以往的AWT組件大多使用native 
 code所構(gòu)造出來,因此Swing中的JFrame便繼承原有AWT中的Frame
 類,,面不是繼承JComponent類,。同樣,JApplet是繼承原有AWT中的JApplet類,,也不是繼承JComponent類,。
    
 JFrame、JDialog,、JWindow及JApplet這四個組件統(tǒng)稱為最上層組件,,因為其余的swing組件都必須依附在此四組件之一上才能
 顯示出來。此四組件均實現(xiàn)(Implement)RootPaneContainer這個界面(Interface),此界面定義了各種容器取得與設(shè)置并不是真實的容器,,它是由Glass 
 Pane與Layered Pane所組成(Layered Pane里擁有Content Pane與Menu 
 Bar,而Menu Bar可選擇使用或不使用),,
 我們不能在JRootPane上加入任何的組件,因為它只是一個虛擬的容器,,若要在最上層組件上加入組件,,必須加在Layered 
 Pane或是
 Layered Pane里的Content 
 Pane上。以JFrame為例,,一般我們要在JFrame上加入其他組件(如JButton,、JLabel等)必須先取得JFrame
 的Content Pane,然后將要加入的組件放在此Content 
 Pane中,而不是直接就加到JFrame上,。因此若要在JFrame中加入一個按鈕,,不
 能像以前AWT時一樣寫成frame.add(button)的形式,而必須先取得JFrame的Content 
 Pane,然后將按鈕加入Content Pane中,,如:
   frame.getContentPane().add(button)
 否則在編譯的時候?qū)⒂绣e誤信息產(chǎn)生,。
 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 注意:
 1.組件必須加在容器中,而容器本身具有層次性的關(guān)系,,就如同珠寶盒一般,,大盒子里面可以放小盒子,小盒子里面還可以放更小的盒子,,而珠寶就可以放在某一個盒子中,,這里的珠寶就代表組件,盒子就代表容器,。因此若您想在JFrame加入任何組件時,,必須
 先取得JFrame的容器來放置這些組件,而由于JFrame,、JDialog,、JWindow與JApplet是顯示Swing組件的源頭,,我們可以稱它們?yōu)楦?br> 組件,也就是所謂的最上層組件,。
 2.RootPaneContainer它是一個interface,共有5個類實現(xiàn)(Implement)它,,分別是JFrame、JAppleet,、JWindow,、JDialog、
 JInternalFrame,其中JInternalFrame是一個lightweight 
 Component,它不是一個最上層組件,,也就是說JInternalFrame不能單獨顯示出來,,必須依附在最上層組件中,我們將在下面討論組件,,而JFrame,JApplet,JWindow,JDialog均為最上層組件,。
 &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
 RootPaneContainer定義了下面幾種方法:
    方法
  Container       getContentPane()返回contentPane
  Component       getGlassPane()返回glassPane
  JLayeredPane    getLayeredPane()返回layeredPane
  JRootPane       getRootPane返回屬于這個組件的JRootPane
  Void            setContentPane(Container 
 contentpane)設(shè)置ContentPane
  Void            setGlassPane(Component 
 glassPane)設(shè)置GlassPane
  Void            setLayeredPane(JLayeredPane 
 layeredPane)設(shè)置LayeredPane
 JFrame如何取得Content Pane的實際流程,下面是一段很簡單的程序代碼:
  public class Simple{
    Simple(){
       JFrame frame=new JFrame();
       Container contentPane=frame.getContentPane();
       JButton button=new JButton();
       contentPane.add(button); 
    }
  }
 當(dāng)我們寫frame.getContentPane()時,,會返回此frame的Content 
 Pane,也就是一個容器組件,,有了容器之后我們才能將button組件
 擺進去,此時JFrame才算擁有button組件,。所以JFrame就好像是一塊空地,,要在這空地上信人應(yīng)該先蓋一棟房子(容器),然后人
 ,、家具,、設(shè)備等等(組件)就能搬進此房子中。下面的層次結(jié)構(gòu)說明了最上層組件都含有JRootPane組件,,JRootPane本身就含有容
 器組件,,可讓最上層組件裝入其他的組件。
      |Frame------JFrame(JRoot Pane)
      |
 Window|Dialog-----JDialog(JRoot Pane)
      |
      |
      |-----------JWindow(JRoot Pane)
 Applet -----------JApplet(JRoot Pane)
 圖示:
         |Grass Pane
         |
 Root Pane|
         |            |Content Pane
         |Layered Pane|
                      |Menu Bar
1-3:版面管理器(Layout Menager)
         |BorderLayout
         |FlowLayout
         |GridLayout
  AWT----|CardLayout
         |GridBagLayout
  Swing--|BoxLayout
 1-3-1:BorderLayout的使用:
   BorderLayout的類層次結(jié)構(gòu)圖:
       java.lang.Object
        --java.awt.BorderLayout
   構(gòu)造函數(shù):BorderLayout()建立一個沒有間距的border layout
             BorderLayout(int hgap,int 
 vgap)建立一個組件間有間距的border layout
  BorderLayout將版面劃分為東,、西,、南、北,、中
 例子:BorderLayoutDemo.java
 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
 public class BorderLayoutDemo{
   public BorderLayoutDemo(){
     JFrame f=new JFrame();
        Container contentPane=f.getContentPane();
        contentPane.setLayout(new BorderLayout());
        contentPane.add(new 
 JButton("EAST"),BorderLayout.EAST);
        contentPane.add(new 
 JButton("WEST"),BorderLayout.WEST);
        contentPane.add(new 
 JButton("SOUTH"),BorderLayout.SOUTH);
        contentPane.add(new 
 JButton("NORTH"),BorderLayout.NORTH);
        contentPane.add(new 
 JLabel("CENTER",JLabel.CENTER),BorderLayout.CENTER);
        f.setTitle("BorderLayout");
        f.pack();
        f.setVisible(true);
        /***read**/
        /*處理關(guān)閉窗口的操作,,若你沒寫這一段,就算你已經(jīng)關(guān)閉窗口了,,但程序并不會終止。
         */
        f.addWindowListener(
           new WindowAdapter(){
               public void windowClosing(WindowEvent e){
                  System.exit(0);
               }
           }
        );
       /***read**/
   }
   public static void main(String[] args){
     BorderLayoutDemo b=new BorderLayoutDemo();
   }
 }
   
 設(shè)置組件的間距,,你可以使用有間距參數(shù)的BorderLayout構(gòu)造函數(shù),,也可以利用BorderLayout的setHgap(int 
 hgap)與
   setVgap(int vgap)兩個方法來達成。
 1-3-2:FlowLayout的使用:
   FlowLayout的類層次結(jié)構(gòu)圖:
       java.lang.Object
        --java.awt.FlowLayout
   構(gòu)造函數(shù):FlowLayout()建立一個新的Flow 
 Layout,,此FlowLayout默認值是居中對齊,,組件彼此有5單位的水平與垂直間距,。
             FlowLayout(int align)建立一個新的Flow 
 Layout,此FlowLayout可設(shè)置排列方式,,組件彼此有5單位的水平與垂直
          間距,。
             FlowLayout(int align,int hgap,int 
 vgap)建立一個新的Flow Layout,此FlowLayout可設(shè)置排列方式與組件間距,。
 FlowLayoutDemo.java
 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
 public class FlowLayoutDemo{
   public FlowLayoutDemo(){
    JFrame f=new JFrame();
       Container contentPane=f.getContentPane();
       /*你可以使用有間距的FlowLayout構(gòu)造函數(shù),,使FlowLayout的排列具有間距,并
        *并可利用排列方向參數(shù)來指定靠什么方向排列,,F(xiàn)lowLayout共有五種排列方式,,
        
 *依次是CENTER(默認值),LEFT,RIGHT,LEADING,TRAILING,若我們將下面程序第13
        *行改成contentPane.setLayout(new 
 FlowLayout(FlowLayout.LEFT)); 
        */
       contentPane.setLayout(new FlowLayout());       
       contentPane.add(new JButton("first"));
       contentPane.add(new JButton("second"));
       contentPane.add(new JButton("third"));
       contentPane.add(new JButton("fourth"));
       contentPane.add(new JButton("fifth"));
       contentPane.add(new JButton("Last"));
       
       f.setTitle("FlowLayout");
       file://f.pack();//必須將f.pach()去掉,否則setSize功能將沒有作用
       f.setSize(400,220);
       f.setVisible(true);
        f.addWindowListener(
           new WindowAdapter(){
               public void windowClosing(WindowEvent e){
                  System.exit(0);
               }
           }
        );
   }
   public static void main(String[] args){
     FlowLayoutDemo b=new FlowLayoutDemo();
   }
 }
 1-3-3:GridLayout的使用:
       GridLayout的類層次結(jié)構(gòu)圖:
       java.lang.Object
        --java.awt.GridLayout
    
 GridLayout比FlowLayout多了行和列的設(shè)置,,也就是說你要先設(shè)置GridLayout共有幾行幾列,,就如同二維平面一般,然后你加
 進去的組件會先填第一行的格子,,然后再從第二行開始填,,依此類扒,就像是一個個的格子一般,。而且GridLayout會將所填進去組
 件的大小設(shè)為一樣,。
 構(gòu)造函數(shù):GridLayout()建立一個新的GridLayout,默認值是1行1列,。
          GridLayout(int rows,int 
 cols)建立一個幾行幾列的GridLayout.
          GridLayout(int rows,int cols, int hgap,int 
 vgap)建立一個幾行幾列的GridLayout,并設(shè)置組件的間距,。
 例子:GridLayoutDemo.java
 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
 public class CardLayoutDemo implements ActionListener{
  JPanel p1,p2,p3,p4;
  int i=1;
  JFrame f;
  public CardLayoutDemo(){
    f=new JFrame();//當(dāng)做top-level組件
      Container contentPane=f.getContentPane();
      contentPane.setLayout(new GridLayout(2,1));
      
      p1=new JPanel();
      Button b=new Button("Change Card");
      b.addActionListener(this);//當(dāng)按下"Change 
 Card"時,進行事件監(jiān)聽,,將會有系統(tǒng)操作產(chǎn)生,。
      p1.add(b);                file://處理操作在52-64行.
      contentPane.add(p1);
      
      p2=new JPanel();
      p2.setLayout(new FlowLayout());
      p2.add(new JButton("first"));
      p2.add(new JButton("second"));
      p2.add(new JButton("third"));
      
      p3=new JPanel();
      p3.setLayout(new GridLayout(3,1));
      p3.add(new JButton("fourth"));
      p3.add(new JButton("fifth"));
      p3.add(new JButton("This is the last button"));
      
      p4=new JPanel();
      p4.setLayout(new CardLayout());
      p4.add("one",p2);
      p4.add("two",p3);
      /*要顯示CardLayout的卡片,除了用show(Container parent,String 
 name)這個方法外
       
 *,,也可試試first(Container),next(Container),previous(Container),last(Container)這
       *四個方法,,一樣可以達到顯示效果。
       */
      ((CardLayout)p4.getLayout()).show(p4,"one");
      
      contentPane.add(p4);
      
      f.setTitle("CardLayout");
      f.pack();
      f.setVisible(true);
      
      f.addWindowListener(
           new WindowAdapter(){
               public void windowClosing(WindowEvent e){
                  System.exit(0);
               }
           }
      );
      
  }
  public void actionPerformed(ActionEvent event){
     switch(i){
        case 1:
             ((CardLayout)p4.getLayout()).show(p4,"two");
             break;
        case 2:
             ((CardLayout)p4.getLayout()).show(p4,"one");
             break;
     }
     i++;
     if (i==3) i=1;
     f.validate();
  }
  public static void main(String[] args){
   new CardLayoutDemo();
  }
 }
 1-3-5:GridBagLayout的使用:是java中最有彈性但也是最復(fù)雜的一種版面管理器,。它只有一種構(gòu)造函數(shù),,但必須配合
    GridBagConstraints才能達到設(shè)置的效果。
    GridBagLayout的類層次結(jié)構(gòu)圖:
    java.lang.Object
     --java.awt.GridBagLayout
 構(gòu)造函數(shù):
    GirdBagLayout()建立一個新的GridBagLayout管理器,。
    GridBagConstraints()建立一個新的GridBagConstraints對象,。
    GridBagConstraints(int gridx,int gridy,int 
 gridwidth,int gridheight,double weightx,double weighty,
                       int anchor,int fill, Insets 
 insets,int ipadx,int ipady)建立一個新的GridBagConstraints對象
                      ,并指定其參數(shù)的值,。
 參數(shù)說明:
 gridx,gridy:設(shè)置組件的位置,,gridx設(shè)置為GridBagConstraints.RELATIVE代表此組件位于之前所加入組件的右邊。
             
 若將gridy設(shè)置為GridBagConstraints.RELATIVE代表此組件位于以前所加入組件的下面,。建議定義出
             
 gridx,gridy的位置,,以便以后維護程序,。表示放在幾行幾列,gridx=0,gridy=0時放在0行0列,。
 gridwidth,gridheight:用來設(shè)置組件所占的單位長度與高度,,默認值皆為1。你可以使用GridBagConstraints.REMAINDER常
                      量,,代表此組件為此行或此列的最后一個組件,,而且會占據(jù)所有剩余的空間。
 weightx,weighty:用來設(shè)置窗口變大時,,各組件跟著變大的比例,,當(dāng)數(shù)字越大,表示組件能得到更多的空間,,默認值皆為0,。
 anchor:         
 當(dāng)組件空間大于組件本身時,要將組件置于何處,,有CENTER(默認值),、NORTH、NORTHEAST,、EAST,、SOUTHEAST、
                 WEST,、NORTHWEST可供選擇,。
 insets:設(shè)置組件之間彼此的間距,它有四個參數(shù),,分別是上,,左,下,,右,,默認為(0,0,0,0).
 ipadx,ipady:設(shè)置組件內(nèi)的間距,默認值為0,。              
   
 我們以前提過,,GridBagLayout里的各種設(shè)置都必須通過GridBagConstraints,因此當(dāng)我們將GridBagConstraints的參數(shù)都設(shè)置
 好了之后,必須new一個GridBagConstraints的對象出來,,以便GridBagLayout使用,。
 例子:
 GridBagLayoutDemo.java
 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
 public class GridBagLayoutDemo{
   public GridBagLayoutDemo(){
    JButton b;
    GridBagConstraints c;
    int 
 gridx,gridy,gridwidth,gridheight,anchor,fill,ipadx,ipady;
    double weightx,weighty;
    Insets inset;
    
    JFrame f=new JFrame();
    GridBagLayout gridbag=new GridBagLayout();
      Container contentPane=f.getContentPane();
      contentPane.setLayout(gridbag);
      
      b=new JButton("first");
      gridx=0;
      gridy=0;
      gridwidth=1;
      gridheight=1;
      weightx=10;
      weighty=1;
      anchor=GridBagConstraints.CENTER;
      fill=GridBagConstraints.HORIZONTAL;
      inset=new Insets(0,0,0,0);
      ipadx=0;
      ipady=0;
      c=new 
 GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
         fill,inset,ipadx,ipady);
      gridbag.setConstraints(b,c);
      contentPane.add(b);
      
      
      b=new JButton("second");
      gridx=1;
      gridy=0;
      gridwidth=2;
      gridheight=1;
      weightx=1;
      weighty=1;
      anchor=GridBagConstraints.CENTER;
      fill=GridBagConstraints.HORIZONTAL;
      inset=new Insets(0,0,0,0);
      ipadx=50;
      ipady=0;
      c=new 
 GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
         fill,inset,ipadx,ipady);
      gridbag.setConstraints(b,c);
      contentPane.add(b);
      b=new JButton("third");
      gridx=0;
      gridy=1;
      gridwidth=1;
      gridheight=1;
      weightx=1;
      weighty=1;
      anchor=GridBagConstraints.CENTER;
      fill=GridBagConstraints.HORIZONTAL;
      inset=new Insets(0,0,0,0);
      ipadx=0;
      ipady=50;
      c=new 
 GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
         fill,inset,ipadx,ipady);
      gridbag.setConstraints(b,c);
      contentPane.add(b);
      
      b=new JButton("fourth");
      gridx=1;
      gridy=1;
      gridwidth=1;
      gridheight=1;
      weightx=1;
      weighty=1;
      anchor=GridBagConstraints.CENTER;
      fill=GridBagConstraints.HORIZONTAL;
      inset=new Insets(0,0,0,0);
      ipadx=0;
      ipady=0;
      c=new 
 GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
         fill,inset,ipadx,ipady);
      gridbag.setConstraints(b,c);
      contentPane.add(b);
      b=new JButton("This is the last button");
      gridx=2;
      gridy=1;
      gridwidth=1;
      gridheight=2;
      weightx=1;
      weighty=1;
      anchor=GridBagConstraints.CENTER;
      fill=GridBagConstraints.HORIZONTAL;
      inset=new Insets(0,0,0,0);
      ipadx=0;
      ipady=50;
      c=new 
 GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
         fill,inset,ipadx,ipady);
      gridbag.setConstraints(b,c);
      contentPane.add(b);
      f.setTitle("GridBagLayout");
      f.pack();
      f.setVisible(true);
      f.addWindowListener(
           new WindowAdapter(){
               public void windowClosing(WindowEvent e){
                  System.exit(0);
               }
           }
      );      
   }
   public static void main(String[] args){
    new GridBagLayoutDemo();
   }
 }




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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多