<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 37, comments - 8, trackbacks - 0, articles - 0

    Java基礎:小應用程序Applet

    Posted on 2008-08-11 20:29 夢與橋 閱讀(1911) 評論(0)  編輯  收藏 所屬分類: java基礎
    1、執行步驟:首先被編譯成class文件,然后在HTML文件中用<applet></applet>標簽對進行加載,運行此HTML文件。可以使用java、appletviewer進行相應的操作:java  *.java和appletviewer *.html
    2、主要方法:
        (1)init():當Java第一次運行Applet時,系統調用此方法,進行全部的初始化工作,在Applet的生命周期中只運行一次。
        (2)start():init()方法之后自動調用,當離開頁面又返回時再度調用,可調用多次。start()方法用于創建、啟動及重新啟動小應用程序線程。
        (3)stop():當用戶離開包含小應用程序的頁面時自動調用,釋放Applet所占用的資源。
        (4)destop():當Web瀏覽器的Java解釋器重新載入HTML文件或關閉瀏覽器時,此方法被調用,完成小應用程序資源的釋放。
        (5)paint():用于繪制小應用程序的顯示區域,瀏覽器自動在start()方法之后調用此方法,另外如改變窗口大小或者Applet本身需要顯示信息時,主類創建的對象都會自動調用paint()方法。可以通過repaint()方法觸發paint()方法,動態地改變屏幕外觀。可多次被調用。
        (6)run():包含了線程的小應用程序的主要代碼。當小應用程序正在執行一個單獨線程時,瀏覽器在start()方法之后調用run()方法。
    3、Applet的安全機制(以防面試時被問及)
        (1)Applet永遠無法運行本地系統上的可執行程序。
        (2)Applet除了與所在的服務器聯系外,無法再同任何其他的服務器取得聯系。
        (3)Applet不能對本地文件進行讀寫操作。
        (4)除了本地系統上使用的Java版本號、操作系統名稱和版本、系統使用的特殊字符外,Applet不能獲取其他有關本地計算機的任何信息。
        (5)Applet的彈出窗口都會帶有一個警告信息。
    由于Applet是在JVM中解釋執行,而不是由用戶計算機的CPU直接運行,所以使這些安全規則成為可能。
    4、一個基本的程序實例:
        (1)創建Applet類:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    public class AppletDemo extends JApplet implements ActionListener{
        
    private JPanel panel;
        
    private JLabel labelPhoto;
        
    private JLabel mess;
        String str;
        
    public JComboBox cmbSelect;
        
    private String strPhotoName[]={"images\\image1.jpg","images\\image2.jpg","images\\image3.jpg"};
        
    public void init(){
            panel
    =new JPanel();
            labelPhoto
    =new JLabel(new ImageIcon("images\\image1.jpg"));
            cmbSelect
    =new JComboBox(strPhotoName);
            mess
    =new JLabel();
            cmbSelect.addActionListener(
    this);
            panel.add(labelPhoto);
            panel.add(cmbSelect);
            panel.add(mess);
            panel.setLayout(
    new FlowLayout(FlowLayout.CENTER,30,18));
            getContentPane().add(panel);
        }

        
    public void actionPerformed(ActionEvent e) {
            
    int iItem=cmbSelect.getSelectedIndex();
            mess.setText(strPhotoName[iItem]);
            labelPhoto.setIcon(
    new ImageIcon(strPhotoName[iItem]));
        }

    }
        (2)編譯Applet類得到字節碼文件
        (3)打包成jar文件:將不同目錄的文件壓縮并打包成一個帶.jar擴展名的檔案文件,可以減少Applet下載時間。當前例子中,字節碼所在的目錄下有一個images文件夾,將其打包為wzz.jar,命令如下:
                                            jar cvf wzz.jar ApppletDemo.class images
        (4)將Applet包嵌入到HTML:
    Applet標簽的基本語法:<applet jar=jar文件.jar   code=類文件.class   codebase=class文件的路徑
                                       width=value  height=value   align=  alt=>
                                                        <param   name="參數名字"    value="參數值">
                                                        ....
                                            </applet>
    當前例子是在某一個文件夾下創建html文件applet.html,并創建目錄wang,里面存放jar文件wzz.jar。代碼:
    <html>
    <applet archive=wzz.jar codebase=wang code=AppletDemo.class width=300 height=300></applet>
    </html>
        (5)執行Applet:可在安裝了JRE的本地機器上,通過瀏覽器執行,也可用JDK自帶的AppletViewer程序來運行和調試:AppletViewer a.html
    5、一個向Applet傳遞參數的簡單程序
    (1)applet  code:
    import java.applet.Applet;
    import java.awt.*;
    public class ParamAppletDemo extends Applet{
        
    private int age;
        
    private String name;
        
    private String like;
        
    public void init(){
            age
    =Integer.parseInt(getParameter("age"));
            name
    =getParameter("name");
            like
    =getParameter("like");
        }

        
    public void paint(Graphics g){
            g.drawString(
    "姓名:"+name+";年齡:"+age+";愛好:"+like,100,100);
        }

    }
    (2)html  code :
    <html>
    <head><title>信息檔案</title></head>
    <body>
    <h4>個人信息:</h4><hr>
    <applet code=ParamAppletDemo.class width=-300 height=300>
    <param name=age value=20>
    <param name=name value="孫悟空">
    <param name=like value="計算機、文學、體育">
    </applet>
    </body>
    </html>
    6、繪制字符串:
    import java.awt.Graphics;
    import java.awt.Color;
    import java.awt.FontMetrics;
    import java.awt.Font;
    import java.applet.*;
    public class StringPaintDemo extends Applet {
        
    //FontMetrics 類定義了字體規格對象
        
    //該對象封裝了有關在特定屏幕上呈現特定字體的信息
        FontMetrics FM;
        
    int Ascent,Descent,Width,AppletWidth,AppletHeight,X,Y;
        
    public void init(){
            setBackground(Color.white);
    //背景為白色
            AppletWidth=getSize().width;//取得顯示區域的寬度
            AppletHeight=getSize().height;//取得顯示區域的高度
        }

        
    public void paint(Graphics g){
            g.drawRect(
    00, AppletWidth-1, AppletHeight-1);//繪制邊框
            g.setFont(new Font("黑體",Font.BOLD,32));//設置字型
            FM=g.getFontMetrics();//取得FontMetrics類字體
            Ascent=FM.getAscent();//取得Ascent
            Descent=FM.getDescent();//取得Descent
            Width=FM.stringWidth("繪圖基礎");//取得字符串寬度
            
    //計算置中坐標
            X=(AppletWidth-Width)/2;
            Y
    =(AppletHeight-(Ascent+Descent))/2+Ascent;
            g.drawString(
    "繪圖基礎", X, Y);//繪制字符串陰影
            g.setColor(Color.green);
            g.drawString(
    "繪圖基礎",X-2, Y-2);//繪制字符串前景
        }

    }

    知識參考:Baseline:字符串繪制的基底線。
                        Ascent:自基底線向上延伸的最大距離。
                        Descent:自基底線向下延伸的最大距離。
                        Leading:顯示字符和指定y坐標之間的距離。
                        Heigh:字符串高度,相當于Leading+Ascent+Descent。
                        Width:字符串寬度。
    7、一個顯示圖象的演示程序:
    import java.awt.*;
    import java.applet.*;
    public class ImageDemo extends Applet{
        Image picture;
        
    public void init(){
            
    //getCodeBase()獲得基URL
            picture=getImage(getCodeBase(),"1.jpg");
        }

        
    public void paint(Graphics g){
            
    //drawImage()方法是把圖象一邊裝入內存,一邊顯示
            g.drawImage(picture,50,50,this);
        }

    }
    8、利用Applet播放聲音:
    //下面這些代碼寫在一個Applet的子類中
    //AudioClip類在java.awt包中
    AudioClip soun=getAudioClip(getCodeBase(),"1.mid");
    g.drawString(
    "播放聲音",50,100);
    sound.loop();
    9、一個四等分圓的演示程序:
    //以下程序序來自黃斐編著的《Java面向對象程序設計》
    //繪制一個四等分的圓,分別用四種不同顏色(red、yellow、blue、green)區分
    //內切圓對應的起點坐標為(40,40)長度為220
    import java.awt.*;
    import java.applet.*;
    public class RectDemo extends Applet{
        
    int AppletWidth,AppletHeight;
        
    public void init(){
            setBackground(Color.white);
    //設置背景色
            AppletWidth=getSize().width;//取得顯示區域寬度
            AppletHeight=getSize().height;//取得顯示區域高度
        }

        
    public void paint(Graphics g){
            g.drawRect(
    0,0,AppletWidth-1,AppletHeight-1);
            g.drawRect(
    39,39,221,221);
            g.setColor(Color.red);
            g.fillArc(
    40,40,220,220,0,90);//繪制填滿弧形0度到90度
            g.setColor(Color.yellow);
            g.fillArc(
    40,40,220,220,90,90);
            g.setColor(Color.blue);
            g.fillArc(
    40,40,220,220,180,90);
            g.setColor(Color.green);
            g.fillArc(
    40,40,220,220,270,90);
        }

    }
    10、要求用直方圖顯示學生成績統計數據。學生成績分為5個檔次,即優、良、中、及格、不及格。顯示區域為330*250,水平軸的坐標為(15,210)和(300,210),每個矩形塊的寬度為40,高度為C*35,C是成績比例,其值分別為10%、20%、40%、20%、10%,矩形之間的間隔為10。程序如下:
    //以下程序序來自黃斐編著的《Java面向對象程序設計》
    //學生成績管理程序演示
    //繪圖原則:背景圖應該最先繪制,其次才是繪制主要圖形或其他圖形
    import java.awt.*;
    public class Example extends java.applet.Applet {
        
    int AppletWidth,AppletHeight;
        
    int a=1,b=2,c=4,d=2,e=1;//abcde分別表示優、良、中、及格、不及格的比例
        public void init(){
            setBackground(Color.white);
            AppletWidth
    =getSize().width;//取得顯示區域的寬度
            AppletHeight=getSize().height;
        }

        
    public void paint(Graphics g){
            
    //g.drawRect(0,0,AppletWidth-1,AppletHeight-1);//繪制邊框
            g.setFont(new Font("宋體",Font.PLAIN,14));//設置字型
            g.drawString("信息管理班電子商務課程成績統計表",7535);
            
    //畫出垂直坐標和標尺
            g.drawLine(152015210);//繪制垂直線
            g.drawLine(1517520175);
            g.drawLine(
    1514020140);
            g.drawLine(
    1510520105);
            g.drawLine(
    15702070);
            g.drawLine(
    15352035);
            
    //用矩形塊的高度顯示成績比例
            g.setColor(Color.lightGray);//背景色為淺灰
            g.fillRect(25210-e*3540, e*35);
            g.fillRect(
    75210-d*3540, d*35);
            g.fillRect(
    125210-c*3540, c*35);
            g.fillRect(
    175210-b*3540, b*35);
            g.fillRect(
    225210-a*3540, a*35);
            
    //用矩形框的高度顯示成績比例
            g.setColor(Color.blue);//背景色為藍色
            g.fillRect(25210-e*3540, e*35);
            g.fillRect(
    75210-d*3540, d*35);
            g.fillRect(
    125210-c*3540, c*35);
            g.fillRect(
    175210-b*3540, b*35);
            g.fillRect(
    225210-a*3540, a*35);
            
    //繪制水平線
            g.setColor(Color.black);
            g.drawLine(
    15210300210);
            g.drawString(
    "不及格"25230);
            g.drawString(
    "及格"75230);
            g.drawString(
    ""125230);
            g.drawString(
    ""175230);
            g.drawString(
    ""225230);
            }

    }

    11、鼠標和鍵盤事件程序演示:
    import java.awt.*;
    import java.applet.Applet;
    public class MouseMode extends Applet{
        String mouseDownEvent
    =null;
        String mouseUpEvent
    =null;
        String mouseDragEvent
    =null;
        String keyUpEvent
    =null;
        String keyDownEvent
    =null;
        
    //鼠標事件
        public boolean mouseUp(Event eve,int x,int y){
            mouseUpEvent
    ="mouseUp:"+x+","+y;
            repaint();
            
    return true;
        }

        
    public boolean mouseDrag(Event eve,int x,int y){
            mouseDragEvent
    ="mouseDrag:"+x+","+y;
            repaint();
            
    return true;
        }

        
    public boolean mouseDown(Event eve,int x,int y){
            mouseDownEvent
    ="mouseDown:"+x+","+y;
            repaint();
            
    return true;
        }

        
    //鍵盤事件
        public boolean keyDown(Event eve,int letter){
            
    if(letter==27)//ESC鍵
                keyDownEvent="Esc鍵被按下";
            
    else
                keyDownEvent
    ="keyDown:"+(char)letter;
            repaint();
            
    return true;
            }

        
    public boolean keyUp(Event eve,int letter){
            
    if(letter==27)//ESC鍵
                keyUpEvent="Esc鍵被釋放";
            
    else
                keyUpEvent
    ="keyUp:"+(char)letter;
            repaint();
            
    return true;
            }

        
    //繪圖
        public void paint(Graphics g){
            
    if(mouseUpEvent!=null)
                g.drawString(mouseUpEvent, 
    545);
            
    if(mouseDownEvent!=null)
                g.drawString(mouseDownEvent, 
    575);
            
    if(mouseDragEvent!=null)
                g.drawString(mouseDragEvent, 
    515);
            
    if(keyDownEvent!=null)
                g.drawString(keyDownEvent, 
    595);
            
    if(keyUpEvent!=null)
                g.drawString(keyUpEvent, 
    5125);
        }

    }

    12、將應用程序轉換成Applet的方法:
        (1)把JFrame派生類替換為JApllet類
        (2)刪除main()方法
        (3)將所有初始化代碼從構造函數剪切到Apllet的init()方法中
        (4)刪除所有顯示或關閉窗體的方法:show()或setVisible() 、setDefaultCloseOpertation,另外如setsize()、setTitle()也要刪除,因為Applet的大小是在HTML中由網頁設置,其標題由裝載它的網頁設定。
        (5)去掉不安全操作,使之符合Applet安全規則,否則會拋出異常。
        (6)創建一個HTML頁面,作為Applet的載體,并設置顯示 Applet在網頁中的位置和大小。

            演示程序:
    應用程序代碼:

    import javax.swing.*;
    import java.awt.*;
    public class GridLayoutDemo extends JFrame{
        JPanel p;
        JButton b1,b2,b3,b4;
        JTextArea ta;
        JTextField tf;
        
    public GridLayoutDemo(){
            
    super("流布局演示");
            setSize(
    250,150);
            p
    =new JPanel();
            p.setLayout(
    new GridLayout(3,2));
            getContentPane().add(p);
            b1
    =new JButton("one");
            b2
    =new JButton("two");
            b3
    =new JButton("three");
            b4
    =new JButton("four");
            ta
    =new JTextArea("JTextArea");
            tf
    =new JTextField("JTextField");
            p.add(b1);
            p.add(b2);
            p.add(b3);
            p.add(b4);
            p.add(ta);
            p.add(tf);
            setVisible(
    true);
            
        }

        
    public static void main(String[] args) {
            
    new GridLayoutDemo();
        }

    }
    轉換后的Applet代碼:
    import javax.swing.*;
    import java.awt.*;
    public class GridBagLayoutDemo extends JApplet{
        JPanel p;
        JTextArea ta;
        JTextField tf;
        JButton b1,b2;
        JLabel l1,l2;
        GridBagConstraints gbc;
        GridBagLayout gbl;
        
    public void init(){
            p
    =new JPanel();
            gbc
    =new GridBagConstraints();
            gbl
    =new GridBagLayout();
            p.setLayout(gbl);
            getContentPane().add(p);
            ta
    =new JTextArea("我是文本域",5,10);
            b1
    =new JButton("我是按鈕b1.");
            b2
    =new JButton("我是按鈕b2");
            tf
    =new JTextField("我是文本框");
            l1
    =new JLabel("我是一個標簽");
            l2
    =new JLabel("我是另一個標簽");
            
    //布局JTextArea
            gbc.weightx=0;//指定如何分布額外的水平空間
            gbc.weighty=0;//指定如何分布額外的垂直空間
            
    //BOTH:在水平方向和垂直方向上同時調整組件大小
            
    //fill:當組件的顯示區域大于它所請求的顯示區域的大小時使用此字段
            gbc.fill=GridBagConstraints.BOTH;
            addComponent(ta,gbl,gbc,
    0,0,1,3);
            
    //布局按鈕b1
            gbc.fill=GridBagConstraints.HORIZONTAL;
            addComponent(b1,gbl,gbc,
    1,0,2,1);
            
    //布局按鈕b2
            gbc.fill=GridBagConstraints.HORIZONTAL;
            addComponent(b2,gbl,gbc,
    1,1,2,1);
            setVisible(
    true);
            
    //布局文本框tf
            gbc.fill=GridBagConstraints.BOTH;
            addComponent(tf,gbl,gbc,
    1,2,2,1);
            setVisible(
    true);
            
    //布局標簽l1
            gbc.fill=GridBagConstraints.BOTH;
            addComponent(l1,gbl,gbc,
    0,3,2,1);
            setVisible(
    true);
            
    //布局標簽l2
            gbc.fill=GridBagConstraints.BOTH;
            addComponent(l2,gbl,gbc,
    1,3,2,1);
            setVisible(
    true);p=new JPanel();
            gbc
    =new GridBagConstraints();
            gbl
    =new GridBagLayout();
            p.setLayout(gbl);
            getContentPane().add(p);
            ta
    =new JTextArea("我是文本域",5,10);
            b1
    =new JButton("我是按鈕b1.");
            b2
    =new JButton("我是按鈕b2");
            tf
    =new JTextField("我是文本框");
            l1
    =new JLabel("我是一個標簽");
            l2
    =new JLabel("我是另一個標簽");
            
    //布局JTextArea
            gbc.weightx=0;//指定如何分布額外的水平空間
            gbc.weighty=0;//指定如何分布額外的垂直空間
            
    //BOTH:在水平方向和垂直方向上同時調整組件大小
            
    //fill:當組件的顯示區域大于它所請求的顯示區域的大小時使用此字段
            gbc.fill=GridBagConstraints.BOTH;
            addComponent(ta,gbl,gbc,
    0,0,1,3);
            
    //布局按鈕b1
            gbc.fill=GridBagConstraints.HORIZONTAL;
            addComponent(b1,gbl,gbc,
    1,0,2,1);
            
    //布局按鈕b2
            gbc.fill=GridBagConstraints.HORIZONTAL;
            addComponent(b2,gbl,gbc,
    1,1,2,1);
            setVisible(
    true);
            
    //布局文本框tf
            gbc.fill=GridBagConstraints.BOTH;
            addComponent(tf,gbl,gbc,
    1,2,2,1);
            setVisible(
    true);
            
    //布局標簽l1
            gbc.fill=GridBagConstraints.BOTH;
            addComponent(l1,gbl,gbc,
    0,3,2,1);
            
    //布局標簽l2
            gbc.fill=GridBagConstraints.BOTH;
            addComponent(l2,gbl,gbc,
    1,3,2,1);        
        }

        
    private void addComponent(Component c,GridBagLayout g
                ,GridBagConstraints gc,
    int column ,int row,int width,int height)
        
    {
            gc.gridx
    =column;//指定包含組件的顯示區域開始邊的單元格
            gc.gridy=row;//指定位于組件顯示區域的頂部的單元格
            gc.gridwidth=width;//指定在組件顯示區域的一行中的單元格數
            gc.gridheight=height;//指定在組件顯示區域的一列中的單元格數
            g.setConstraints(c, gc);//設置此布局中指定組件的約束條件
            p.add(c);
        }

        }

    主站蜘蛛池模板: 亚洲三级在线播放| 18pao国产成视频永久免费| 亚洲已满18点击进入在线观看| 国产亚洲成人久久| 日韩免费观看视频| 99久久这里只精品国产免费| 永久免费av无码入口国语片| 一级黄色免费网站| 国产精品亚洲精品久久精品| 亚洲看片无码在线视频| 亚洲精品无码久久久久久久| 亚洲精品国产精品乱码不卡√| 国产精品观看在线亚洲人成网| 亚洲日韩乱码中文无码蜜桃臀| 性做久久久久免费观看| 可以免费看黄的网站| 无码精品人妻一区二区三区免费 | 亚洲狠狠婷婷综合久久| 亚洲第一页在线视频| 亚洲AV福利天堂一区二区三| 亚洲精品成人片在线播放| 国产亚洲老熟女视频| 久久伊人亚洲AV无码网站| 国产亚洲精品无码专区| 久久亚洲欧洲国产综合| 在线观看亚洲天天一三视| 国产亚洲美女精品久久久| 亚洲一区二区三区乱码A| 男女免费观看在线爽爽爽视频| 91人人区免费区人人| 99热这里只有精品6免费| 一区二区三区免费在线视频| 美女被爆羞羞网站免费| 亚洲午夜电影在线观看| 亚洲色偷偷偷鲁综合| 亚洲午夜福利717| 国产AV无码专区亚洲AV毛网站| 国产成人无码a区在线观看视频免费| 性生交片免费无码看人| 午夜精品在线免费观看| 久久午夜羞羞影院免费观看|