java程序設計--孫鑫java無難事Lesson10《Java圖形界面編程》

java程序設計--孫鑫java無難事Lesson10《Java圖形界面編程》
本節要點:
1.Java圖形界面編程
2.AWT、佈局管理器、事件模型,
3.JFC、Swing編程。應用JBuilder快速開發圖形界面程序部分略去。
詳細內容:

1.AWT(Abstract Window Toolkit)

AWT抽象窗口工具包,SUN公司提供的用於圖形界面編程(GUI)的類庫。基本的AWT庫處理用戶界面元素的方法是把這些元素的創建和行爲委託給每個目標平臺上(Windows、Unix、Macintosh等)的本地GUI工具進行處理。例如:如果我們使用AWT在一個Java窗口中放置一個按鈕,那麼實際上使用的是一個具有本地外觀和感覺的按鈕。這樣,從理論上來說,我們所編寫的圖形界面程序能運行在任何平臺上,做到了圖形界面程序的跨平臺運行。

2.佈局管理器
容器裏組件的位置和大小是由佈局管理器來決定的。容器對佈局管理器的特定實例保持一個引用。當容器需要定位一個組件時,它將調用佈局管理器來完成。當決定一個組件的大小時,也是如此。在AWT中,給我們提供了五種佈局管理器:
BorderLayou、 FlowLayout、GridLayout、 CardLayout、GridBagLayout

我們可以通過設置空佈局管理器,來控制組件的大小和位置。調用setLayout(null)。

在設置空佈局管理器後,必須對所有的組件調用setLocation(),setSize()或setBounds(),將它們定位在容器中。

java佈局測試代碼如下:

  1. //java佈局測試代碼   
  2. import java.awt.BorderLayout;  
  3. import java.awt.Button;  
  4. import java.awt.CardLayout;  
  5. import java.awt.Color;  
  6. import java.awt.FlowLayout;  
  7. import java.awt.Frame;  
  8. import java.awt.GridLayout;  
  9. import java.awt.Panel;  
  10. import java.awt.event.ActionEvent;  
  11. import java.awt.event.ActionListener;  
  12. import java.awt.event.WindowAdapter;  
  13. import java.awt.event.WindowEvent;  
  14. public class YourFrame extends Frame  
  15. {  
  16.     /** 
  17.      * 
  18.      */  
  19.     private static final long serialVersionUID = 1L;  
  20.     private Panel  boderPanel;  
  21.     private Panel  flowPanel;  
  22.     private Panel  gridPanel;  
  23.     private Panel  cardPanel;  
  24.     //事件監聽類   
  25.     class YourWindowListener extends WindowAdapter  
  26.     {  
  27.           
  28.     }  
  29.     //框架類   
  30.     public YourFrame(String strTitle)  
  31.     {  
  32.         super(strTitle);  
  33.         setSize(600,400);  
  34.         setLocation(100100);//設置起始位置   
  35.           
  36.         setBorderLayoutPanel();  
  37.         setFlowLayoutPanel();  
  38.         setGridPanel();  
  39.         setCardLayout();  
  40.         Color cl = new Color(02550);  
  41.         setBackground(cl);  
  42.         setLayout(new GridLayout(2,2));  
  43.         add(boderPanel);  
  44.         add(flowPanel);  
  45.         add(gridPanel);  
  46.         add(cardPanel);  
  47.         addWindowListener(  new YourWindowListener()  
  48.         {  
  49.             public void windowClosing(WindowEvent arg0) {  
  50.                 // TODO Auto-generated method stub   
  51.                 System.exit(0);  
  52.             }  
  53.         });  
  54.     }  
  55.     //BorderLayout佈局   
  56.     public void setBorderLayoutPanel()  
  57.     {  
  58.         boderPanel=new Panel();  
  59.         boderPanel.setLayout(new BorderLayout());  
  60.         Button btn1 = new Button("Center");  
  61.         Button btn2 = new Button("East");  
  62.         Button btn3 = new Button("South");  
  63.         Button btn4 = new Button("West");  
  64.         Button btn5 = new Button("North");  
  65.         boderPanel.add(btn1, BorderLayout.CENTER);  
  66.         boderPanel.add(btn2, BorderLayout.EAST);  
  67.         boderPanel.add(btn3, BorderLayout.SOUTH);  
  68.         boderPanel.add(btn4, BorderLayout.WEST);  
  69.         boderPanel.add(btn5, BorderLayout.NORTH);  
  70.           
  71.     }  
  72.     //FlowLayout佈局   
  73.     public void setFlowLayoutPanel()  
  74.     {  
  75.           
  76.         flowPanel=new Panel();  
  77.         flowPanel.setLayout(new FlowLayout());  
  78.         Button btn1 = new Button("Java Button Test ");  
  79.         //更改標籤字符串   
  80.         btn1.addActionListener( new YourActionListener()  
  81.         {  
  82.             public void actionPerformed(ActionEvent e)  
  83.             {  
  84.                   
  85.                  ((Button)e.getSource()).setLabel("Button Pressed");  
  86.             }  
  87.               
  88.         });  
  89.         Button btn2 = new Button("Frame");  
  90.         flowPanel.add(btn1);  
  91.         flowPanel.add(btn2);  
  92.     }  
  93.     //GridLayout佈局   
  94.     public void setGridPanel()  
  95.     {  
  96.         gridPanel=new Panel();  
  97.         gridPanel.setLayout(new GridLayout(2,2));  
  98.         Button btn1 = new Button("one");  
  99.         Button btn2 = new Button("two");  
  100.         Button btn3 = new Button("three");  
  101.         Button btn4 = new Button("four");  
  102.         gridPanel.add(btn1);  
  103.         gridPanel.add(btn2);  
  104.         gridPanel.add(btn3);  
  105.         gridPanel.add(btn4);  
  106.     }  
  107.     //CardLayout佈局   
  108.     public void setCardLayout()  
  109.     {     
  110.         final CardLayout cl=new CardLayout();  
  111.         cardPanel=new Panel();  
  112.         cardPanel.setLayout(cl);  
  113.         Button btn1 = new Button("黑桃A");  
  114.         Button btn2 = new Button("紅桃K");  
  115.         ActionListener al =new ActionListener()  
  116.         {  
  117.             public void actionPerformed(ActionEvent e)  
  118.             {  
  119.                   
  120.                 cl.next(cardPanel);  
  121.             }  
  122.         };  
  123.         btn1.addActionListener(al);  
  124.         btn2.addActionListener(al);  
  125.         cardPanel.add(btn1,"1");  
  126.         cardPanel.add(btn2,"2");  
  127.     }  
  128.     @SuppressWarnings("deprecation")  
  129.     public static void main(String[] args)  
  130.     {  
  131.         YourFrame yf=new YourFrame("Frame Test");  
  132.         yf.show();  
  133.     }  
  134. }  
  135. class YourActionListener implements ActionListener  
  136. {  
  137.     @Override  
  138.     public void actionPerformed(ActionEvent arg0)  
  139.     {  
  140.         // TODO Auto-generated method stub   
  141.     }  
  142. }  
//java佈局測試代碼
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class YourFrame extends Frame
{
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private Panel  boderPanel;
    private Panel  flowPanel;
    private Panel  gridPanel;
    private Panel  cardPanel;
    //事件監聽類
    class YourWindowListener extends WindowAdapter
    {
        
    }
    //框架類
    public YourFrame(String strTitle)
    {
        super(strTitle);
        setSize(600,400);
        setLocation(100, 100);//設置起始位置
        
        setBorderLayoutPanel();
        setFlowLayoutPanel();
        setGridPanel();
        setCardLayout();
        Color cl = new Color(0, 255, 0);
        setBackground(cl);
        setLayout(new GridLayout(2,2));
        add(boderPanel);
        add(flowPanel);
        add(gridPanel);
        add(cardPanel);
        addWindowListener(  new YourWindowListener()
        {
            public void windowClosing(WindowEvent arg0) {
                // TODO Auto-generated method stub
                System.exit(0);
            }
        });
    }
    //BorderLayout佈局
    public void setBorderLayoutPanel()
    {
        boderPanel=new Panel();
        boderPanel.setLayout(new BorderLayout());
        Button btn1 = new Button("Center");
        Button btn2 = new Button("East");
        Button btn3 = new Button("South");
        Button btn4 = new Button("West");
        Button btn5 = new Button("North");
        boderPanel.add(btn1, BorderLayout.CENTER);
        boderPanel.add(btn2, BorderLayout.EAST);
        boderPanel.add(btn3, BorderLayout.SOUTH);
        boderPanel.add(btn4, BorderLayout.WEST);
        boderPanel.add(btn5, BorderLayout.NORTH);
        
    }
    //FlowLayout佈局
    public void setFlowLayoutPanel()
    {
        
        flowPanel=new Panel();
        flowPanel.setLayout(new FlowLayout());
        Button btn1 = new Button("Java Button Test ");
        //更改標籤字符串
        btn1.addActionListener( new YourActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                
                 ((Button)e.getSource()).setLabel("Button Pressed");
            }
            
        });
        Button btn2 = new Button("Frame");
        flowPanel.add(btn1);
        flowPanel.add(btn2);
    }
    //GridLayout佈局
    public void setGridPanel()
    {
        gridPanel=new Panel();
        gridPanel.setLayout(new GridLayout(2,2));
        Button btn1 = new Button("one");
        Button btn2 = new Button("two");
        Button btn3 = new Button("three");
        Button btn4 = new Button("four");
        gridPanel.add(btn1);
        gridPanel.add(btn2);
        gridPanel.add(btn3);
        gridPanel.add(btn4);
    }
    //CardLayout佈局
    public void setCardLayout()
    {   
        final CardLayout cl=new CardLayout();
        cardPanel=new Panel();
        cardPanel.setLayout(cl);
        Button btn1 = new Button("黑桃A");
        Button btn2 = new Button("紅桃K");
        ActionListener al =new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                
                cl.next(cardPanel);
            }
        };
        btn1.addActionListener(al);
        btn2.addActionListener(al);
        cardPanel.add(btn1,"1");
        cardPanel.add(btn2,"2");
    }
    @SuppressWarnings("deprecation")
    public static void main(String[] args)
    {
        YourFrame yf=new YourFrame("Frame Test");
        yf.show();
    }
}
class YourActionListener implements ActionListener
{
    @Override
    public void actionPerformed(ActionEvent arg0)
    {
        // TODO Auto-generated method stub
    }
}

運行效果如下圖所示:


3.AWT事件模型
Events(事件):描述發生了什麼的對象。
Event source(事件源):事件的產生器。

Event handlers(事件處理器):接收事件對象、解釋事件對象並處理用戶交互的方法。

事件模型圖解如下:


帶菜單的文件讀取測試程序代碼如下:
  1. import java.awt.FileDialog;  
  2. import java.awt.Frame;  
  3. import java.awt.Menu;  
  4. import java.awt.MenuBar;  
  5. import java.awt.MenuItem;  
  6. import java.awt.TextArea;  
  7. import java.awt.TextField;  
  8. import java.awt.event.ActionEvent;  
  9. import java.awt.event.ActionListener;  
  10. import java.awt.event.WindowAdapter;  
  11. import java.awt.event.WindowEvent;  
  12. import java.io.FileInputStream;  
  13. import java.io.FileNotFoundException;  
  14. import java.io.IOException;  
  15.   
  16. public class HisFrame extends Frame  
  17. {  
  18.   
  19.     /** 
  20.      * 
  21.      */  
  22.     class HisWindowListener extends WindowAdapter  
  23.     {  
  24.           
  25.     }  
  26.     private static final long serialVersionUID = 1L;  
  27.     /** 
  28.      * @param args 
  29.      */  
  30.     HisFrame(String strtitle)  
  31.     {  
  32.         super(strtitle);  
  33.         final HisFrame hf=this;  
  34.         setSize(400400);  
  35.         setLocation(100,100);  
  36.         //TextField tf=new TextField("",20);   
  37.         final TextArea    ta=new TextArea();  
  38.         add(ta);  
  39.         addWindowListener(  new HisWindowListener()  
  40.         {  
  41.             public void windowClosing(WindowEvent arg0) {  
  42.                 // TODO Auto-generated method stub   
  43.                 System.exit(0);  
  44.             }  
  45.         });  
  46.         //創建目錄工具欄   
  47.         MenuBar mb=new MenuBar();  
  48.         //創建菜單和菜單項   
  49.         Menu    mFile=new Menu("File");  
  50.         MenuItem mFile1=new MenuItem("New");  
  51.         MenuItem mFile2=new MenuItem("Open");  
  52.         //響應菜單命令   
  53.         mFile2.addActionListener(new ActionListener()  
  54.         {  
  55.             @SuppressWarnings("deprecation")  
  56.             public void actionPerformed(ActionEvent e)  
  57.             {  
  58.                   
  59.                 FileDialog fd=new FileDialog(hf,"Open File",FileDialog.LOAD);  
  60.                 fd.show();  
  61.                 String strFile=fd.getDirectory()+fd.getFile();  
  62.                 //取得文件   
  63.                 if(!strFile.isEmpty())  
  64.                 {  
  65.                     try  
  66.                     {  
  67.                           
  68.                         FileInputStream  fis=new FileInputStream(strFile);  
  69.                         byte[] buf=new byte[3000];  
  70.                         int len=fis.read(buf);  
  71.                         String str=new String(buf,0,len);  
  72.                         ta.append(str);  
  73.                     }  
  74.                     catch (FileNotFoundException e1)  
  75.                     {  
  76.                         // TODO Auto-generated catch block   
  77.                         e1.printStackTrace();  
  78.                     }  
  79.                     catch (IOException e2) {  
  80.                         // TODO Auto-generated catch block   
  81.                         e2.printStackTrace();  
  82.                     }  
  83.                 }  
  84.             }  
  85.         });  
  86.         MenuItem mFile3=new MenuItem("Save");  
  87.         MenuItem mFile4=new MenuItem("Save As");  
  88.         MenuItem mFile5=new MenuItem("Exit");  
  89.         mFile5.addActionListener(new ActionListener()  
  90.         {  
  91.             public void actionPerformed(ActionEvent e)  
  92.             {  
  93.                   
  94.                  System.exit(0);  
  95.             }  
  96.         });  
  97.           
  98.         mFile.add(mFile1);  
  99.         mFile.add(mFile2);  
  100.         mFile.add(mFile3);  
  101.         mFile.add(mFile4);  
  102.         mFile.add(mFile5);  
  103.         mb.add(mFile);  
  104.           
  105.         Menu    mEdit=new Menu("Edit");  
  106.         MenuItem mEdit1=new MenuItem("Undo");  
  107.         MenuItem mEdit2=new MenuItem("Copy");  
  108.         MenuItem mEdit3=new MenuItem("Cut");  
  109.         MenuItem mEdit4=new MenuItem("Replace");  
  110.         mEdit.add(mEdit1);  
  111.         mEdit.add(mEdit2);  
  112.         mEdit.add(mEdit3);  
  113.         mEdit.add(mEdit4);  
  114.         mb.add(mEdit);  
  115.           
  116.         setMenuBar(mb);  
  117.           
  118.     }  
  119.     public static void main(String[] args)  
  120.     {  
  121.         // TODO Auto-generated method stub   
  122.         HisFrame  hf=new HisFrame("java Frame");  
  123.         hf.show();  
  124.     }  
  125. }  
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class HisFrame extends Frame
{

    /**
     *
     */
    class HisWindowListener extends WindowAdapter
    {
        
    }
    private static final long serialVersionUID = 1L;
    /**
     * @param args
     */
    HisFrame(String strtitle)
    {
        super(strtitle);
        final HisFrame hf=this;
        setSize(400, 400);
        setLocation(100,100);
        //TextField tf=new TextField("",20);
        final TextArea    ta=new TextArea();
        add(ta);
        addWindowListener(  new HisWindowListener()
        {
            public void windowClosing(WindowEvent arg0) {
                // TODO Auto-generated method stub
                System.exit(0);
            }
        });
        //創建目錄工具欄
        MenuBar mb=new MenuBar();
        //創建菜單和菜單項
        Menu    mFile=new Menu("File");
        MenuItem mFile1=new MenuItem("New");
        MenuItem mFile2=new MenuItem("Open");
        //響應菜單命令
        mFile2.addActionListener(new ActionListener()
        {
            @SuppressWarnings("deprecation")
            public void actionPerformed(ActionEvent e)
            {
                
                FileDialog fd=new FileDialog(hf,"Open File",FileDialog.LOAD);
                fd.show();
                String strFile=fd.getDirectory()+fd.getFile();
                //取得文件
                if(!strFile.isEmpty())
                {
                    try
                    {
                        
                        FileInputStream  fis=new FileInputStream(strFile);
                        byte[] buf=new byte[3000];
                        int len=fis.read(buf);
                        String str=new String(buf,0,len);
                        ta.append(str);
                    }
                    catch (FileNotFoundException e1)
                    {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    catch (IOException e2) {
                        // TODO Auto-generated catch block
                        e2.printStackTrace();
                    }
                }
            }
        });
        MenuItem mFile3=new MenuItem("Save");
        MenuItem mFile4=new MenuItem("Save As");
        MenuItem mFile5=new MenuItem("Exit");
        mFile5.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                
                 System.exit(0);
            }
        });
        
        mFile.add(mFile1);
        mFile.add(mFile2);
        mFile.add(mFile3);
        mFile.add(mFile4);
        mFile.add(mFile5);
        mb.add(mFile);
        
        Menu    mEdit=new Menu("Edit");
        MenuItem mEdit1=new MenuItem("Undo");
        MenuItem mEdit2=new MenuItem("Copy");
        MenuItem mEdit3=new MenuItem("Cut");
        MenuItem mEdit4=new MenuItem("Replace");
        mEdit.add(mEdit1);
        mEdit.add(mEdit2);
        mEdit.add(mEdit3);
        mEdit.add(mEdit4);
        mb.add(mEdit);
        
        setMenuBar(mb);
        
    }
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        HisFrame  hf=new HisFrame("java Frame");
        hf.show();
    }
}
程序運行效果如下圖所示:

4.Java基礎類
JFC(Java Foundation Classes):Java基礎類,是關於GUI組件和服務的完整集合,主要包含5個API:AWT、Java2D、Accessibility、Drag & Drop、Swing。JFC提供了幫助開發人員設計複雜應用程序的一整套應用程序開發包。
Java2D是一套圖形API,它爲Java應用程序提供了一套高級的有關二維(2D)圖形圖像處理的類。Java2D API擴展了java.awt和java.awt.image類,並提供了豐富的繪圖風格,定義了複雜圖形的機制和精心調節繪製過程的方法和類。這些API使得獨立於平臺的圖形應用程序的開發更加簡便。
Accessibility API提供了一套高級工具,用以輔助開發使用非傳統輸入和輸出的應用程序。它提供了一個輔助的技術接口,如:屏幕閱讀器,屏幕放大器,聽覺文本閱讀器(語音處理)等等。
Drag & Drop技術提供了Java和本地應用程序之間的互操作性,用來在Java應用程序和不支持Java技術的應用程序之間交換數據。
JFC模塊的重點在Swing。Swing用來進行基於窗口的應用程序開發,它提供了一套豐富的組件和工作框架,以指定GUI如何獨立於平臺地展現其視覺效果。 利用swing包中類建立界面程序測試代碼如下:
  1. import javax.swing.*;  
  2. public class SwingTest  
  3. {  
  4.     @SuppressWarnings("deprecation")  
  5.     public static void main(String[] args)  
  6.     {  
  7.         JFrame jf=new JFrame("JFrame");  
  8.         jf.setSize(300400);  
  9.         jf.show();  
  10.         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );  
  11.         JButton jb=new JButton("Javax.swing");  
  12.         jf.getContentPane().add(jb);  
  13.     }  
  14. }  
import javax.swing.*;
public class SwingTest
{
    @SuppressWarnings("deprecation")
    public static void main(String[] args)
    {
        JFrame jf=new JFrame("JFrame");
        jf.setSize(300, 400);
        jf.show();
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
        JButton jb=new JButton("Javax.swing");
        jf.getContentPane().add(jb);
    }
}

//運行效果如下圖所示:


利用系統提供的輔助工具,建立界面程序在此略去。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章